{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Reading ChemDraw files\n",
    "\n",
    "Molli features a robust Chemdraw parser, specifically designed to work with the `CDXML` format. This parser is capable of parsing point, axial, and planar chirality, along with full structure labels, substructure labels, atom labels, charges, and multiplicities. This notebook will explain its properties and how to use it.\n",
    "\n",
    "## Reading Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/blakeo2/new_molli/molli_dev/molli/molli/ftypes/cdxml.py:157: CDXMLSyntaxWarning: CDXML file /home/blakeo2/new_molli/molli_dev/molli/molli/files/parser_demo.cdxml contains redundant label 'naphthalene' Only the first occurrence will be kept.\n",
      "  warn(\n"
     ]
    }
   ],
   "source": [
    "#This imports molli\n",
    "import molli as ml\n",
    "\n",
    "#This configures the visualization tool\n",
    "ml.visual.configure(bgcolor='white')\n",
    "\n",
    "# This just loads an example file that contains boundary cases\n",
    "cdxf = ml.CDXMLFile(ml.files.parser_demo_cdxml)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note: The file was designed to purposely show the warnings when duplicate structures are present!\n",
    "\n",
    "The `CDXMLFile` class can be thought of as a dictionary, with keys being the label, and the values being the `Molecule`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['benzene', 'naphthalene', 'stereo', 'decoy', 'isotopes', 'phenanthrene_ar', 'estradiol', 'taxadiene', 'substruct_stereo', 'high_complexity_1', 'r_binol', 'chiral_fragment', 'attached_acronym', 'Taniaphos', 'BrettPhos', 'toluene', 'stereo_groups', 'attachments'])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# This will display the list of all named molecules in the file.\n",
    "cdxf.keys()"
   ]
  },
  {
   "attachments": {
    "Point_Chirality.PNG": {
     "image/png": "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ert5dV1zxz2K6iAUAaiJUITVyN2riJaJ+XnrIRRaJubVda8irrebV9c1d9yjqA5CEYCaCEVYjdy9imiZmF/uuglaJubVda8irrebV+6aO+5RVA+hCEBNhCKsRu5eRbRMzC933QQtE/PqulcR19vNK3fNHfcoqodQBKAmQhFWI3evIlom5pcb8YxrJuaXulcRLRPzy7XccY+ieghFAGoiFGE1cvcqomVifrkRz7hmYn6pexXRMjG/XMsd9yiqh1AEoCZCEVYjd68irpmYX2rEM1omlpFquaNlYhmpljvuUVTPixcvDjdu3Dgp+n8f7969GzwvgDYQirAauXsVcc3E/FIjntEysYxUyx0tE8tItdxxjyIA2CZCEVbFu1cR9yhaRuq6CVomlpFquaNlYhmpljuutwOAbSIUYVW8exVxj6JlpK6boGViGamWO1omlpFqueN6OwDYJkIRVsW7VxH3KFqOd90ELRPLSLXc0TKxDK/ljuvt6tJgCRokQeXp06fHR8t8+PDhdF69DgDECEVYFe9eRdyjaDnedRO0TCwj1XJHy8QyvJY7rrerS4HGLm/dL6oUo88B6EIowqp49yriHkXL8a6boGViOXHLHS0Ty/Fa7rjerq44FKl8+vTp+GweoQhAF0IRVsW7VxH3KFqOd90ELRPLiVvuaJlYjtdyx/V2dXmh6Pbt28dn8whFALoQirAq3r2KdEYWy4ivm6BlYllxyx0tE8uKW+643q4uLxSplHSjIxQB6EIowqp49yrSGVksI75ugpaJZcUtd7RMLCtuueN6u7pSoUilqxsdoQhAF0IRVsfeq0hnYrGc+LoJWiaWFbfc0TKxrLjljuvt6rKhSP+/cuXK6d9d3egIRQC6EIqwOvZeRToTi+XE103QMrGsuOWOlollxS13XG9XVxyK3r17d2b557rREYoAdCEUYXXsvYp0JhbLstdN0DKxrLjljpaJZdmWO663qy8ORfFjKqludIQiAF0IRVgde68inYnFsux1E7RMLCtuuaNlYlm25Y7r7erzQpGUdKMjFAHoQij6I519VevEn//5n1PpW4F//dd/PT14/du//dvxUSzl7//+70/Xx//+7/8eH8VS/vRP//RkXdAysbz/+7//O903/vZv//b4KGpJhaKSbnSEovmpPvW73/3upH7FKLLYgqZD0cePHw937949/aH85ptvTv7VmXG6pczPro+rV6+enP1TxU+tRXoO83r//v3h+vXrJ+vgr//6rw+//e1vD+fOneNmugtRRe/SpUuHX/3qVycVjW+//fakdUKtFZifus6pa+lvfvObk/Xxy1/+kspfZalQJPY5lbgbHaFoPqo/hR4G+s0Ky13Hd47lWLNmQ5EOaKrghZ1VJYSiUG7dukX3lJmooh2vD1tU+dA6Q306aCmI2lEA7YFNhcr4fEI4tcv/r/7qr878TWV8PiGc2uUf/03lr45cKJJcNzpCUX2qL6neFJazSrxv6DjPsRxr1Vwo8g5oKqp02wv8Q9EOrIvLuVdOHVofdrS5UPSY97jWHa149Tx58uTMwAqhaMALL7Rqn1GlHdPTb04cTkP5x3/8xy8eU6FVtR5V+OIhuFW0X/zDP/yD+ziVv2l1haJcNzpCUT36rVI9yTtG3Lhxwz2m6Fhu1w+wBs2EIu9sq0rcPev58+eH8+fPfzGdHtNzmEZqfehH1XbPSrUgqXJCK950bHcHW2yLkPYR2900FLo4Tk998b2KhG0RCtdCxtPQqjotVfju37/vhlMNChN+h1In3Kj8TacrFImdRiV0oyMU1VFSZ9KxIXWCR/UAjuVYi92HotwBLXWWO5z1SM1DN5Xhcj+OqmB4FWs9ZkekC0WvoXWr9YVhcme/U8Nva/vXNV/xPFTGx0uFU1UwUt0V9XiqVZXK+DipcKrt/+3bt8epzkqdyFHlj1bVcUpCkXjd6AhF00qdlAnHDu+4rO3fm4djOdZi16EodUCzZ79zUhVGFfqM9zekgmFpmlRlXK+NcrmTBfbsd07qDCEDlfTXFU5LKgup7itUxvvTb40XTkt/a3RsoFV1eqWhyOtGRyiaRmrbVim9Djt1IodjOZa2y1CUOtuqCsOQkbNyr8eZ8W6p5acfwCFdEjXPmHDVulyY6bv8VFlPtarSxbFbWH5emBky0Iump1V1uKmXX66LI5W//kpDkdhpVRSMSueFT/Ud77dKx44hJ8JSraocy7GUXYWi1AFNZYqWHf0geJVxuqn4tD68s99TVNA079iWjtbUbGmrua73qmZLW811vUfaPlPhdIpwT6vqNPqEIrHd6C5cuNBrXvxM9Rvverkpfk9UL0vV2ziWY267CEW5A9rUZxy0A+cuGKSbyrytB6nKuLYFfQYq49Of/c6ZulVwj+YMLKlWVSrjP0t15Zl6GdUOXi3oG4ribnR95kV+gKqpjx2p30XtL0N6+ABDbD4U6YDmnYHTYzUrYVww6EudEa3dmpY6k6XPUnL92F6lKmG1A3yqVXXqkxRbkjojqt+MmteZ6Lco1ara8r3Ylhq9L3UiR+un5RM5Jdth31Akdp4+8+oERauV8dxvho4dNX8zUidySq8FB8bYbChKHdDmPrBwweBPcme/57zuKlUZ17aibaYVqe1yzq6euVbV1rpFrGFEslRlvLVWVW2XaxgEIdWqWvuE3tro2KHloO/dtQ0OCUViu9GVzKvPEY4jrXWPV73FO4bOuRxyoay1YznmtblQlDqgqQztgqBKydgzEKlKz967qWh9pPoDLzXKkt5T7+19pimuLVuz1MkCbZtzhlMr1aoaKuN7lgqnemypilbLlXHtA0uH01jqhsl7b1XVsTo+dnS1zAwNRXE3uq55vePHktvIHFK/C3Of2LRSJ3LmPoGBdmwqFKUOaEODR6g8awdTGXvmWq+XCgh7PDOeCoJrOZOTCwh76xahbS91smAtQTAXEMaelFibLWx7LVXGU91r17Lt2WNR/Bn3eOzIdevN0bDaCjQq+n8f2gZK5031fND62Vv3eC+chu+6luCh+p23/y4Z2LBPmwhFqQOadoihXdS0I8UVAvWvn0LqB1UHgT10U9la5Tb1effSLcLbllXWEk5jaw/TY+Qqt2tspdza5+1LZ/ZV0Y6/21pPjORaVfdwIif1W7zWVsrUNbJj6h5roXpIKpyu9bc4dazbe48czGfVoSh1QBtzBiN1xqHGQWdvFwzmDthrD3u5A8BWu0WkThZsoRtU6uykylrOTvaVOmBvoeVla+Ghi/b3LYe9rZ146pJrOd3ysWOrrapb3r5yJ3IYxRFjrTIU6UcoN/LJkAqsdhSvb6pKzYNk7rts5cx47kdoa107ttBVoEuuArv2CkYs1aqqcLGVbhFbDqcxfZetV8ZTF4pv5ffW2nqrajh2xJ9fZWsV2NSxQ2Urx8FcON3ayY/Ud9GxfGvHQazH6kJR6oCmg/KQrk5rCSX6wVwilI211+ZqffbURaW61mKNtC3v9QzZGkY86kvLO9WSvfXrDnKV8bW2qqb26a0PIKFjwxZbVfd67NCJHG87W3Ow0Daiekb8mVW23k021eq19f0ey1hNKEod0Mb80KQqWtpZljrrqe/pnVXW51zTmfHc59x6X2ortY2s7cC9lc85Ru4EhsLHWkJf7nPuqftGqiKl772mynjqhJOOHXs6Y7yVVtXcsWOtJ5yGSP0mr61VNRVOt9r1LyV1Ikffc2stxFjO4qFIB7TUWbChZzBSB481HSRTP1RLnxlPVTBCRWgvFQxL32mtLTCqYHgnC/ZWwbC0vNfaApOqCGm/3Us4jaW6qWg5LFkZ13aQutZjK92Zhkhdq7r2Y8eWWyNStA3meqIs2aqqbcELp3tuQdE2mKpP5n4Pbty4cVr67kMPHjw4nddjn9fQ8H28ePEiO6997b5F8+JLi4Wi3AFtaLe23A6xxoOkDhKpyvjcZ8ZzP+76LGvtMjOl1LU6S1TGte5bq2DEUgd1VQjnbq3MhdM1naWvSWe/VaGKl8ESlXFV6rzPsqeW05w1/V6vORjMZU2/1/os3nFsby2nOfGJca2bHLucVD59+nR8ppsCRpjPY5/vO4y8ho/PzWtfu2/RvPjSIqEodXAdegZDO3kqYOkgufYm4twFg3NUxnPdAJY887gUfeel+ijntuVWKhgxhY7Uvl27AqwKRupESyvh1Mptn3O0quq3MtWFbO6gvAa5yvgcx45UOF1bF7K5LNmyr3WdCqe63UjtfXONwvbZ9d3j5XX79u3jM90IRfsyayhKVf7HnMHQD69Xgd3iQXLu75LrZri1kWhqyPVRrhG0qWCkKXykLhSu0QrcFU6HtGTviZa3FxZrVcZT63+uyv/azd2qyrEjL3WisdaJnLnfb2/i5aZSekJ4LaHo6dOnJ9OUlr5d+VoxSyjKVWiGnsFYunWlplRlbKrKeKpCozL0Oq69mqMyTgWjXI0TKzHCaTltu6kz41NVxlMnJ+Zomdqa1LWqU1WO9XuYOnbUODmxZfotSrXcTLXtpo4dtcLwXsXLL5SSbnRrCUV9Xxu+6qFo6q4vuUrqng6S+h5TH3z0I50LXK2f/c7RskkFFy3TIboqGITTNIUTL7josaFdHGus41bkzlQPPZGTajlfekCBtcsdI8d0o5q75XwvtLy9Lo7hd2XIiZxU/YCW02HsMrxy5crp/0u60RGK9qVaKKrRnJ/6Ud7zQTLXitCnopaqYIypRLZoqlYEKhjj5UJ+ny5uuUrk0BMQLcqdGe+zHFMDnujY0cqgFlOYqlU1deygNaKf1PVGfY/Bqd88Wk6Hs8tR3crs3111y72EIm8UvQ8fPpx5XP/XYzG99717906n0+f2pvOoNU5d/+z8+r9G3usz4IXeT+8bXqPv5wgmD0U1RvDKBaxWDpKpM7FdlfHUgVHrY+hZqtaFyrhX+euqjOcqGITTYVQR0BnweJmqdHUHTYXTMS0crdP6GHJmXOvJG41Tf7c4qMVU9JszpFW1xrEc6WP50GMHLafj2eUpNoyo5CrnqnzbeWP2+TWHovh7KJSEv+Oi5wIFGG8aFTudJ17OXunatrVu1KLnzRtKn+HHJwtF+oFMnSUcOkRo7ke51ZGfUss4/kHNnf3mjNI0UpU/lbgyngunVDCmkToTq8q4wo/F2e/6tD68k1leZTx1LUxXRRFl9PuSamGIW6dT4VRl6LEcZ+WWcemxQ/sLLafTsMs1KO1Gt8dQpCAS/p8qCiO5QBRKqqWmZN5QUuFKn8Gup1zR+5WYJBSlznwMPYOR+8HQj0PrP8q5yriW27//+7+762PodVzIS1XGtQ60LlLbMuG0jtzv0X/9139x9ntmucDzn//5n+6+09UCjmH0e5O6jlGV8f/4j/+Y9FiOvNSJX4XXcOyIn9NvlR63wQnj2OUblHaj6xOKVIHX36XlwoULp/POGYrC+ypI6HvrteNWHTu9WmI0jYr+b6fzWmnUXc5Oo/ezo+fFr6Gix2NxC5E+rwKUptXntp9RxXuN2OhQpDe2b6qiHXroGYyh3cRapGXvnYn95ptvzvyt5ckZpfq8yl+8LlSoYNSXOrHinVXi7Hd9pevDa9XD9FIncuLfK9bHPLxjuXfs4KRwHXYZWyXd6GzF2xNXzIcWr0JvX7tP4PLocft+Xh3F61LnDe1tQ4/3fnb+VAtO3AoUv04cWlOtSbZFqmTgjNGhSOyZjq4+/Cl9ur7grLgyHn5MOaM0v7jyZw9shNP5xWdi7Y8s4XR+Wh+2K5D9/9BjB4aLT0La3yvWx/zssfy3v/3t4Ve/+tXJ/zkpXFfY5lVi9pjhVaptmPDEYWNo6QpFfYrHvlauq5l9nVQQUZe5MI2Wn6VjbnhOLUQ59nVUbFc8G1hzn1fsa3SZJBSpz6sqHkP6fve5LgNpWk5aXlpuOrCpskFf/OWEfuChksG2vKxwDZF+oDnRsjytj9/85jcn+8bvfvc7BrVYkLqMhhM5+r3SNUYcO5aj40ToFvTLX/7y8C//8i/HZ1CLlnUosa5udH1CUd8brNpWDv0dqxWKcicL7evkRnaz01k2zOj/XewysJ/Lfl6vtcrS82GZeq191iShaIhw4WfcnUKFYYmH08Hsf/7nf45/YWlaF1Qw1uP3v/894XQF1GIUfu8VUrE8rZM//OEPx7+wJDuapupJqCssaxVPrhtdn1DkBZsc+75doahP4PKUfs4wjUpOarquoBdLhSh7vdWUpn21Qql7vfQdrx8AsD22C4UKQRX4mb03oVrxUJf9LUpJdaNbSyjq+9qxuUJR38+cCkXhMZUpTftqHdT6Y3f2UHSmMHf/CgDAfuhaFnsMoGcA8DM76IJajVCX/S1KSXWjIxT5UtMRiv5IZwFTw4AyLDEAtEUnwexxgIvIgZ/ZnjS6NhV12d+iHFtBV1E3OkKRLzWd/U6pgRosOzy3uggGtuWu6zqhPqqHIl3QrJag8OFD4Z45ANCm+CQZozICP7P7hupKqMsu7y5xNzpCkS81nR2uu2vUOEndqykMRqLSFa7Uqqfvp9I1bbVQFEZ7Ch86FA03qa4TAIA22aG4VbhuAviJes7YfUOtRqjLLu8ucTc6WzyEorPTxcNs50aOswFKxVK4CY8rqOZai+x3y42sJ91bwAAaxSYeVS7cM4frhgCgbfEJM3WjBvDTCLJ231DdCXXZ5V0i7kaXm5dQ9OV09r1U4tYbBZx4GetvS9PY5xWM4iHC9bdtUeq6L5JUCUUS7pmjwh3j56FlrBSswoXLy9M6COuD7X95YV2oMNrZsuKTZnQRAn6i3ye7b6hwMrkuu6xL2W50uXkJRV9OF7cWhaLPEAcmlVRLkLevaFq9hrd+NH2XaqFIO7G6SJR8CEzD9tPX6DVYlr1YVicJsByFoLAuVOjCu5y4e5CKulUD+HJkRhVOqtVll3UprxudZ0xw2Wsoklw3RFtSgSiw3ehypetaoqBaKML87HDnNLkvSycF7A7JCELL0qAudn3cv3//+AzmFq+LUDgbDhxOBh2J9w0GparLLus+4i5eHkJRejqvm1wo6upWGmQUsGw3OVv0eO66pRihaEfUL1/BKBSGOl+OzuzZdcE1E8vSwC92fXCX+OV4Z8JVdC0F0DqdsIn3DW5qX5dCQCh9dc2rCnl4Ptfi4VE3s9y8Y147VvpaYRqVnNLpgqm+S9/3jRGKAACz0W0a4kqfCvcqAr4crl7lyZMnx2cB1EQoAgDMxg7CYwv3KgJ+6vER7xt09wXmQSgCAMxGo5HGlT4V7lUEnL02OBQG6gHmQSgCAMxGI2PGlT4VrrsDvryHl8qtW7eOzwKoiVAEAJjNuXPnvqj0qXCvIsDfP9R6BKA+QhEAYBbx/aJs4V5FwB8rZc6+wX0HgXkQinYidfb17du3xykwFy1zb12oWwTmlxrtTNe2YF6pfSMU7lWElulWDt5+oRuBA6iPULQDubOv3N9gfqn7sKhQ6ZtfarQzQur89HvkrYtQuFcRWpY7aQCgPva0Hcj9kOosOebl3XwvFFru5pca7UwF8/Lu1m/Lq1evjlMC7dH27+0XKjr5CaAuagU7oB9L/Zh6Rc3xmJfOdnvrQoUD2/wURL11oULL3bw07LZX4QuFm1SiZdr+vf1ChWM5UB+hCAAwC+/GlLZwk0q0LHX9o4pO4gCoi1AEAJiFht32KnyhcD8WtCzX9Zrrg4H6CEUAgFlo2G2vwhcK92NBy3RSwNsvVOhaCtRHKAIAVKfrt7zKni0MPYyW5QaFoWspUB+hCABQnQYg8Sp7cQFaleteqlsLAKiLI9DGaUQanUHKFS7QnI+WtbcObGEUofmoy4m3DmzBPF6+fOlW9uLC/oFWqaXU2ydUuN4OqI9QtHFd9/1Q0YhPmEfX6Foq9A2fT66SEQo3DJ1HyW+VCidx0KqvvvrK3SdUuN4OqI9QtHGpu/XbcunSpePUqE3L2lsHtuheLaiv5BoWFUZ1moda5bzlHxdOGqBFXb9XHMeB+ghFG6cKts4g5cq1a9eOU6M2LWtvHdjy8OHD49So6ccff3SXf1yePXt2nAM15UbWsoUujWiRuo16+0MoGrkRQF2EIgBAdQqgXmUvLlw7gRa9fv3a3R9sAVAXexkAoLqS67tUFJ6A1pQMRKLWbwD1EIoAANV5lTyvcK8itEjX0nn7gy0MCgPURSgCAFTVdb1EXIDW6FpTb1+whZEZgbo4+gAAqlJlzqvkpQr3KkJrNGiSty/YwqAwQF2EIgBAVSVdg2zhjDhaUzI6o+71BaAeQtGGafhn74fTK7opHOopvSdOKNevXz/OiRpKRnKyhXtH1VV6j6JQOCOO1pSMzshw9UBdhKINu3jxovvDmSqMXFOPLoD1lnmqaN2hHlWqveWeKjdv3jzOiRru3LnjLvdU4V5eaE3Jjb+1HwGoh1C0UX1bJlQ05CfqKBlO1RZa7uoq6Z9vy+XLl49zooY+rdoqVP7QmpIh6zl5A9RFKNoohSL1u+9TaCmqR8vWW+a5gnrUcuct81RRdzvU8/btW3e5pwpDD6M1XgiKC/fwAuoiFAEAACzk48ePbgiKC92ugboIRQAAAAspvY/X119/fZwDQA2EIgAAgIWoy6gXgrwCoB72MAAAgIU8f/7cDUBe4dpgoB5CEQAAwEL63NyYQUiAeghFG/fixYvDvXv3DleuXDnzw6m/9bieL/X999+fzq//9/HmzZvB8+7Fp0+fDk+fPj3cvn37cOHChdPloXLjxo3DgwcPTpZTKc0T5u8zn9h12Xfevfjw4cPJcrDLMRQ9puc0DeYx5fqwvzeat68x8wJT63NzY3W1A1AHoWijFHa8H0yvqIJe8kNqK9L6fx8thyKFIbvsuooqYu/evTvOnWYrj4SicqpYK5iG799VdPJA6xB11FgfhCLsSZ+bG+vG1ADqIBRtkCoN3o9lV9F8OYSi/lR5i1vpSktXKx6hqD+FzfC9+5aSoIp+aq0PQhH2RDdlDdtkV3n8+PFxLgBTIxRtjHfG1euWpb/1eDxtLhgRivpRIIq7yelvdaGzFTpNp5Y6L8zmghGhqB+vAq5lqGVsu2Xp/3rMLt9QCEbTqbk+7O+N5utrzLzA1HRT1rBNdhV1tQNQB6FoQ2xFV6Wkm4mej4NUKrTY1+8bbFoMRXElTmGoiyp5cctSKrTY1ycU5Wk7D9+3z/f2hsLt2qfQrfb60GuF5wlF2DrdlDVsk11FXe0A1EEo2gidTbU/jF1d4WJxK4U9UxsQisrpzHb4vir6u5QqeTYY6f8eQlG5ePvu0+ITt2iohRXj1F4fhCLsiW7KGrbJrnL9+vXjXACmRijaCNsVLlWJzlFF3Hb18oILoaicDTVDKtFxxc8LLoSiMnGrxJDRmdTKZ1/Da51AmTnWB6EIexK2x5KirnYA6iAUbYQNNH1aJSzbuqHXixGKysStdl6rWwl7Nt1r+SMUlenarktNsY9hnvVBKMJe6GasYXssKefPnz/OCWBqhKINiCvhQ89ix2dw48o8oaiMrfQNabUL7PUTXuWRUFTGhssxXd9sa6wXUlFmjvVBKMJe6GasYXssKefOnTvOCWBqhKINsBWAMZVwsd2+4sqyrUiPKXsPRXY5jan0xSE1ZkPRmLL3UGSX05CuWoENqVSWh5tjfdjfxDGF9Yyl2e28tACog71rA2z/+rEHcVthicMLoaiMHc1v7He1yy0OL3ZdjSl7D0VTfde4oo1h7DKstT7i54YWQhGWppuxettmXL799tvD3/3d3x1+//vfH+cEMDWO/BtgwwqhaHm5ZdiXXW5xBZJQVGaq75qrhKOcXYa11kf83NBCKMLSHj165G6bX3311eEv/uIvDn/5l395+LM/+7OT+xN9/vz5OBeAGjjyb8ASoahvZd9WUsYGhbVbIhT1rVzaddl33q0J33Psd7XbsAqGscuw1vqwzw35TRwzLzAlhZ2wPX7zzTcnIUhhSKFIj926detkMAYA9XHk34CxFQCr9JoiQlHamOVk9bmmKF5XXexn7Dvv1oxZThbXFE1jjvVhf2+GrKsx8wJT+qd/+qeTYbZ//etfn26XKnrs7du3x6kAzIFQtAHx6HNDMfrcNOzoc2MqVbbSx+hzw9nRzsZse4w+N4051gehCFunUeeuXbt2ui2GoiG3nz9/fpwKwJwIRRsxxT1Uuu4fYivSfSszLYWiOKTG4bKUrTx6lXBCUZmu7brUFPsYuE8RkKOucHfu3DndBkPRUNu6vgjAcghFG2EruUMqGmolspUMbyhpQlE5G1iGtCq8e/fudH4VtRrFCEVl4hbQIYHGjvCootfEMHOsD0IRtkaDJOj6oXCtkC137949fPz48TglgKUQijYirmj0rYjbVgkVr3WDUFTOfl+VPhU/rUt7bVfq3lOEonL2+6oodJaKA+qYe0/hJ7XXB6EIW/L48ePD119/fbrdhXL9+vXD+/fvj1MBWBqhaEPis6cKOl1ntPW8va+OSiq02IpMapqU1kKRxMtV66eLKnw2EKmkQguhqJy2c9sSWvq9vRsndu1T6FZ7fei1wvOEIqzVy5cvD5cuXTrd3kLRY17vAADLIhRtTNzio6IzqXGFQ3/bC5VDUUU+hVDUjyprccBRRVDhyJ4Z13Q6AHrrLhekCEX9xC0MKlqGasWzLaP6vx6zyzeUPi0ayKu5Puzvjebra8y8QBeNGqfR48J2Fopai548eXKcCsDaEIo2yKtcl5SuliVCUX9eMCotXS1LtpJIKCrjVcRLS0vLaS611of9vSEUYS00iILuKxS2r1B0HRE3XwXWj1C0UWp5iLunpIqmK7nmhVA0nF12XUUVsZIKOKFoGAXVPicONK13jR2mUWN9EIqwJhok4bvvvnMHUdBIc9x8FdgGQtHGhW5ZcWuF/tbjffotE4rGUeVP4VNdFOPAqsqXujP26Z5FKBpHFWu1xtnlGIoe03OEoflMuT4IRVgLDaPtDaLAzVeB7SEUAQAA9KAbrOpGq3EYunjxIjdfBTaKUAQAAFDg9evX7iAK3HwV2D5CEQAAQIbuJ6T7CsVhSNcRcfNVYB8IRQBg6KJoVX6ePXt2fARAqxR2FHq8QRS4+SqwL4QiADjSPURC5UcXTzOELtAm7fsPHz486RYXhyFuvgrsE6EIAI40WpSt/GiYXaBVGuUvlL400ubQeVM0OmF4zT4jeYpGBw3zdo1yqFZibxAFnSihBRnYL0IRABi6r0ioBKnViHuMoFU2EPRlh16fir3VgEqfYKQwFObL3TbC7v+h6HeAm68C+0coAgBDIch2mdF1A0CLbDDoa45QpPvxlSoNRWotttcPcfNVoB2EIgCIaGjdUClS4foBtMjuA33NEYpUcgHHKg1FooEVuPkq0B5CEQBE1E1GF1OHSpT+D7QmbP8qfc0VilRKutH1CUUA2kQoAgDHy5cvz1S8uDEjWmO3/77mDEUl3egIRQC6EIoAIMHerFEjT3FtAVoStn2VvmqHogcPHpz+X6Ur6BCKAHQhFAFAgm7MaC+61rUGQCvCdq/SV+1QpP/rWr/wt0quGx2hCEAXQhEAZOheRbbixcXXaIXd7vuaIxTJ7du3Tx/LdaMjFAHoQigCgAwNuqCuc6FCde3ateMzwL6FbV5FoaJPUUAJ807FC0W6KWt4zD4e02fqmgZA2whFANDhyZMnZypez58/Pz4D7Jfd5seUqXihSEq60RGKAHQhFAFAATtE9/nz57m7PXYvbO9jy1RSoUi6utERigB0IRQBQAFdSxQqVSoPHz48PgPsk93edY1Qn2LnnUouFHV1oyMUAehCKAKAQrdu3TqtWGlUOoboxp6FbV2lLxuMppILRZLrRkcoAtCFUAQAhRSC7BDdN2/ePD4D7E/YzlX6WiIUSaobHaEIQBdCEQD08OjRo9PKlcrr16+PzwD7YrfzvrpCkbq76QasFy5cOJ1O/1dg0XOeklCU6kZHKALQhVAEAD1ogIWLFy+eVrA0AAOwR2EbV+krF4rUrc2+dlwUjj58+HCc+mcloUi8bnSEIgBdCEUA0JOG5LaVLg3ZDeyN3cb7yoWi8Jy6tymsBDbMaJpYaSiSuBsdoQhAF0IRAAxw/fr100qWbu7KEN3Ym7B9q/SVCkW2lcjrJmeftwMlSJ9QFHejs5+HUATAQygCgAE0RLcddOHu3bvHZ4B9CNu2Sl+pUPT06dOTx7yWoEAtO5rGtiJJn1AkcTe6PvMCaA+hCAAGUhAKFS0FpB9++OH4DLB9Nkj0lQpFJcLgC2NDkdhudH3nBdAWQhEADPTx48eTrnOhsqUudcBe2CDR19BQpAEWwnxx97ohoSjuRtdnXgBtIRQBwAiPHz8+U+HSIAzAHtjtuq+hoSjMp+G6Y0NCkcTd6AhFADyEIgAYScNyhwqXhutm0AXsgQJKKH0p1PSd9969eyf7kK4p8gZhePHixelr6v992M/Td14AbSAUAcBIuoFrCEUqusErgHIhEKl49ygCgNoIRQAwgZs3b55W6s6dO3f48ccfj88ASFGLUBgMIdVCBABzIBQBwAQUguwQ3Xfu3Dk+A8Cj+xCF4bfVrY1ABGBJhCIAmMjDhw9PQ5GK7mUE4Ev2Jq3eoAoAMDdCEQBMRAMs2CG6L1++fHwGQGADEYMeAFgLQhEATEhDcocKn8qzZ8+OzwCw9w0iEAFYE0IRAEzs6tWrpxU/tRwxRDfwE3uvoa7C/YQAzIlQBAAT07VEtnL33XffHZ8B2qYBFey+kSuEIgBzIhQBQAX//M//fPjmm29OKncalY4hugEAWC9CEQBM7OXLl2eG5/71r399+O///u/jswAAYG0IRQAwoTgQqTx58uT4LAAAWCNCEQBMhEAEAMA2EYoAYAIEIgAAtotQBAAjEYgAANg2QhEAjEAgAgBg+whFADAQgQgAgH0gFAHAAAQiAAD2g1AEAD0RiAAA2BdCEQD0QCACAGB/CEUAUIhABADAPhGKAKAAgQgAgP0iFAFABwIRAAD7RigCgAwCEQAA+0coAoCEOBDp/3oMAADsC6EIABwEIgAA2kEoAoAIgQgAgLYQigDAIBABANAeQhEAHBGIAABoE6EIAP6IQAQAQLsIRQCaRyACAKBthCIATSMQAQAAQhHQU6g8Dynff//98VWm9+7du8ODBw8ON27cOPOeFy5cONy+ffvw4sWL45QICEQAAEAIRUBPNnD0LTVCkcJQHIRSRQHp1atXxznbRiACAAABoQjoyYaMvmXqUKTWH+99ukrrrUYEIgAAYBGKgJ5suFiSF4ju3bt30hL06dOn41Q/tSQ9ffr0i2nfvHlznKItBCIAABAjFAE92WCxlA8fPpz5HFeuXDkJPzkKSpouzKOudK0hEAEAAA+hCOgpVKhVlqIWofAZFG5sy1COprOfv6VudAQiAACQQigCerKhYgljg43tdqfR6lpAIAIAADmEIqCnULFWWYINNUO6wClU6Xqi0tal77777vDs2bPDjz/+eHxkWwhEAACgC6EI6ClUrlWWYLvO6f81ff78+cz3vXTp0uHu3buH58+fHz5+/Hicar0IRAAAoAShCOjJhoQl2HsS1b4m6IcffjjzfeMSQpKChgLUmhCIAABAKUIR0JMNBaVFQWYqNhTVHlZbIcJ+j65y+fLlk+52S4cPAhEAAOiDUAT0ZENAadlqKHr06NGZ79G3XL169XD//v2TeyfNhUAEAAD6IhQBPdlKf2nZaihS1zj7PcaWa9euHR4+fHh4/fr18R2mRSACAABDEIqAnmwlfwk2FD19+vT4aB3Xr18/832nLAosISS9ffv2+I7DEYgAAMBQhCKgJ1uxn4oGTLh9+/ZJ4NG/CjupIbN1b6Hw/kNHn/vw4cNJ6aKBFOz3rVnOnTt3EsLUZa9vSCIQAQCAMQhFQE+2Ij+Wgs+VK1fOvKYt7969O075M12fE54fcp8iCe+p+b33CBRUwnvNXb7++uvDzZs3D48fPz4ZBS+FQAQAAMYiFAE92Yr7WKErnMKJWot0jZBCjw1KXotReE6l77DcaiGy86dapHSzVjvd0iWEpCdPnhzev39/8hkJRAAAYAqEIqAnW1EfQy004XXiYKK/FZT0nHfdkL2Bqzd/jr0mKdf9ToMh2PdYWzl//vzhT/7kT07/JhABAIChCEVAT7ZiPoZabNQylOq+9v3335+8h/6NKQTZz6GWpVw3ONE8ul7Jzpe7rujZs2dnpl1j+Zu/+ZuTMEQgAgAAYxCKgJ5spbymEGBSI8yp25z9LCpq+VH3O9typLAUApYtXSPXKRTpPkNjSs2BGhSEvv3225P/X7x48fD58+fjJwcAAOiHUAT0ZCvmtSiwhPfIdY3zglFJGTpq3ZpohDr7nTRqHQAAwBCEIqAnWxGfklp07PU+JV3iRC1D4fqjkqLp98LeXFYtRxocAgAAoC9CEdCTDRhT8lp9vOuJUhR21ALkDfGtrnh6/T4DMmyBQpBGpQvf886dO8dnAAAAyhGKgJWwgx7Y1p89dHWrSd3mQihS6XvjVwAAAEIRsFL2fkIl3ehapQEW7IAOly9fPj4DAABQhlAErFi4xqhPN7oWaTjuEIpUNHIeAABAKUIRsBBd46PQkxsam1BU7vr166ehSNcZMUQ3AAAoRSgCFhIGVtC1Q94ACHosVPL3NGJcLe/fvz8ZgS4ss/v37x+fAQAAyCMUAQuxoUeDKdhgpOuJwihyCk0owxDdAABgCEIRsCC1AIVKvIq6y8VDajPIQjl1mbNDdKtLHQAAQBdCEbCwN2/euPcWUuuRHaYbZZ48eXJmOdL1EAAAdCEUASuhAKSApLK3m6zOzQ7Rrf8DAADkEIoA7M7r16/PtBY9fvz4+AwAAMCXCEUAdunmzZunoUjXGX38+PH4DAAAwFmEIgC7pJHn7BDdGpkOAADAQygCsFsPHz48DUUKSG/fvj0+AwAA8DNCEYDdYohuAABQglAEYNeeP39+GopU9DcAAIBFKAKwe1evXj0NRRcvXjxpQQIAAAgIRQB2T9cS2daiR48eHZ8BAAAgFAFoxJ07d05DkQZd0Oh0AAAAQigC0ASFoHPnzp0GI4UkAAAAIRQBaIa6zYVQpMIQ3QAAQAhFAJqhARY00EIIRZcvXz4+AwAAWkYoAtCUeIjuZ8+eHZ8BAACtIhQBaI5u4hpCkW7uyhDdAAC0jVAEoDk//PDDyQh0IRjdv3//+AwAAGgRoQhAk+7evXsaihiiGwCAthGKADTp48ePJ13nQjBSlzoAANAmQhGAZj1+/Pg0FKm8evXq+AwAAGgJoQhA0y5dunQaivR/AADQHkIRgKapdci2Fqn1CAAAtIVQBKB58RDdut4IAAC0g1AEoHkaec4O0a2R6QAAQDsIRQDwR7pXUQhFCki6lxEAAGgDoQgA/ujz588M0Q0AQKMIRQBw9OzZs9NQpPL8+fPjMwAAYM8IRQBgXL58+TQUXbx48aQFCQAA7BuhCACMt2/fnmktevTo0fEZAACwV4QiAIjcunXrNBSdO3fuZHQ6AACwX4QiAIjEQ3TfuXPn+AwAANgjQhEAONRtLoQiFXWrAwAA+0QoAgCHBljQQAshFGkABgAAsE+EIgBI0JDctrWIIboBANgnQhEAZFy7du00FOnmrgzRDQDA/hCKACBD1xLZQRfu379/fAYAAOwFoQgAOty9e/c0FCkgMUQ3AAD7QigCgA4KQeo6F4LR9evXj88AAIA9IBQBQIEwRPfNmzdpKQIAYGcIRQBQiHsVAQCwT4QiAAAAAE0jFAEAAABoGqEIAAAAQNMIRQAAAACaRigCAAAA0DRCEQAAAICmEYoAAAAANI1QBAAAAKBphCIAAAAATSMUAQAAAGgaoQgAAABA0whFAAAAAJpGKAIAAADQNEIRAAAAgKYRigAAAAA0jVAEAAAAoGmEIgAAAABNIxQBAAAAaBqhCAAAAEDTCEUAAAAAmkYoAgAAANA0QhEAAACAphGKAAAAADSNUAQAAACgaYQiAAAAAE0jFAEAAABoGqEIAAAAQNMIRQAAAACaRigCAAAA0DRCEQAAAICmEYoAAAAANI1QBAAAAKBphCIAAAAATSMUAQAAAGgaoQgAAABA0whFAAAAAJpGKAIAAADQNEIRAAAAgKYRigAAAAA0jVAEAAAAoGmEIgAAAABNIxQBAAAAaBqhCAAAAEDTCEUAAAAAmkYoAgAAANA0QhEAAACAphGKAAAAADSNUAQAAACgaYQiAAAAAE0jFAEAAABoGqEIAAAAQNMIRQAAAACaRigCAAAA0DRCEQAAAICmEYoAAAAANI1QBAAAAKBphCIAAAAATSMUAQAAAGgaoQgAAABA0whFAAAAAJpGKAIAAADQNEIRAAAAgKYRigD09uLFi8P3339/WvT3GPa1VN68eXN8po6pPz/Wy65nldrb1lj6fPFn7vLp06fDu3fvjn9tU/y9P3z4cHwGAOZBKALQ240bNw6/+MUvTov+HsO+lkpJRXCMqT8/1suuZ5Xa29ZY+nzxZ85RmLhw4cLqv1cXfQf7ndceXgHsD6EIQG+EImyFXc8qewlFah168ODB6TRbDkVPnz49831VCEUA5kYoAtDb1KFCFTpbaleICEXtsOtZZe3hIe5Glvq8ccvK2r9Xirqu2u8RCqEIwNwIRQB623qoIBS1w65nla2Gh9gevpfXQhQKoQjA3AhFAHojFGEr7HpWIRQtT4MoxPtgXAhFAOZGKALQWy5UqMJjR3d79erV8Zm0MG0oXRWi3HvoOftaKrGpP38tcVcqfa4ho4zF30ln6Esqnd77B6XLSZ9X76dp9G/X54/f035O+1oqJevGrmcVzdcl9xk8djmEkvqe9vOHomUZxO+tEthtO/5e2obDc95r2PfwxJ+r6zsPde/evS8+u1dqvT8ApBCKAPTmhQpVum7fvn3m8VB0/UOuAhtPr0qZRxeX5ypVeg9VpuLHY1N//qnp+3ufI5QrV64UVRr1mTWt9xqh6L20XD3x5yhZTiEM6N94OYeix0vfU3/nXkvFhrVYPK1eLyV+77ik5vW2OS2L+Dvqc8bT6XtZ3mcIvPfxivcaCj0pWqfx9LVCSfw+Kt4+Xev9ASCFUASgt7iCGl/0nSqpYBFP51U+VcHsquCreJXn2NSffyql3zGUXBgoPSOvovf0QkpcuS5dTl7lPy6l75kKYHHR9/XE043ZtlS07ZR8bhWNDhdonvh5lfi1vNcJ+oQiOzKdir5figKTnVbruZb4fRR4ve9FKAIwN0IRgN684BGKKmOqlHnTpCpb8XRexdWrtOqxUAHMVdhjU3/+qXgBQJ9DnycVcrxuUd60+uy57+aFFE0bTxdKeK3cclfJTee1XuTeU8tHz6eWhRcS42k0f8xb7rn30nfyeNtoaDnz3sML2d73D7Su9bw3TdhOVBQo9L7xNN62IvHnTn2/KYT30OcMCEUA1oBQBKC30kq1VxEMlUQrnsZWmMRreYhbBvTeXqVUJTb155+CVzGMK/leRTdeDt7rxNNIyXRe5VvFVq61zLzAo8fs8tT/42m0HmKp94wryd6yUInFz8fb1tDlHn8e8abTduW9h7Ytj/f9PfE08feSeL14IdTrOpcKT1Pwgqu3fLzlCwA1EYoA9OaFCq8SU1rZiaeJK3hxOFFlz+NVvFViU3/+KcTf0QsMYlsuVOGOg0z83VKvI3G3KRVbIfYq6F6l1n6m3HQln817T6/CL976id83fr5r2/ICpKj1pGQ67/N7JQ7ggTe/J57GW0bx+tX2EiuZprY59zMASCEUAegtrtyqeLyQ4lV24mniCl7X85bXuhOb+vNPIX6f1HfU+6t4lWrvrL8XTqx4evu++n/8vNdS5k3ntTbE03kVcO+1UgFC4taQuOuXfU7Ffj+Jn09dN6ZlbqdLBXPxti9bctemed/fE08Tfy8paQXSOrDPd20vNcTLVqXWfgYAKYQiAL2VnPEP7HQqXoUwnsZW8LxgMrZSOfXnH2uq8KXPFr+OF06s3LIoraBPOV08TS58SNe6tM+p6PWDVHdETRMXrzUsFda8MBJK1/U6eq94Hk88jebzxMvHdqHzPmcugNZCKAKwBv6vLQBkdFVELTudild5y03Tt8JUUqmc+vOPNVWlsOS7x3LLovT1ppwunia3bqRrXdrnVPT6gbfc+5TcOvK6Jqp0hY7SZRlPY7+XpZYfO51tnYs/Y+o6p9qm2v4BYIzuIyYARLoqopadTsWrvOWm6VthKqlUTv35x5qqUljy3WO5ZVH6elNOF0+TWzfStS7tcyp6/cBb7n1Kbh3FnysU+/6e0mUZT5N6Xa8VMrQexl3narSClphq+weAMbqPmAAQ6aqIWnY6Fa/ylpvG6+KzZPe5VOVzDK/iOqSC6lUut959zpvG6lqX9jkVu/685ZXqPueV1LJNtRKFkqvw63Xj6T3xNJovJe76p8/n7VdLIRQBWIPlfgUBbFZXRdSy06l4lbeuaeLnc9dlDBloYeznn0Lp+6gyqy5RXoXcq+j2HWjBXnOizxA/75lyOm+aVPiQuQZaKOWtg7joM6e60ZUuy3ia+HtZ8bVmaiGKg1tqNL05EIoArIH/awsAGXOHojjopC6+T1VIY2sMRfF39EZmk/gaEc1nQ0PcJSr33bwWDftapRX0KafzpklV2L3KdBxq4ufj9Rcv97HhIN62wmvGj6WCfemyjKeJv1csDo/x396ognMhFAFYA//XFgAypg4VXdPEZ7pV4sqrzrzHgSCU2NSffwpexdC22oi+Y1yZVbHi0KTiVfS994sr6qUV9Cmn86ZRiVu8vPXthWX7vEq8/rzl5bWuaRvUMku18IgXMsP7edumV/EvXZbxNPH3imndxvOEkjrJMBdvW/SWDQDU5P/aAkDG3KFI4vdUUUVT0+YqfCqxNYYi8br+6bPlvmMcnMR7HVV89Rp6rdSyjCv8mjaezjPldN40oXQtC6/rWzyN5o95y0PLUNOqxIEmbHeWN7y3DRup54cuc80bT6d5FYC9bSLXrc+bfk6EIgBr4P/aAkBGXInU3yl2OpW4Mikl06jyGE/nFe+MfGzqzz8VfUevgp4qqa5eeh0vGKWKF4iktII+5XTeNF73s7ik1kvJdPru3naTK3F3M2/+uGLvfTcFPKtkGUlumaS259R3tF0ml0AoArAG/q8tAGRMHSpKppFcaNCZc1WkSiqVU3/+qXnfwRZ9V6+LV0wtJ12V/dz3KVmWMuV0qWm8x1W0LLwWoiCeXq/j0bbV1eKoojAShwjvs6UCa1d4KllGktsXUtuz170vt+3PhVAEYA38X1sAyFCFXJW3UHIVdDudilfZKZnGUqVUFTxvev0dV7BiU3/+WvRe9r31OYdcEK/lZb+zll3J94jfX8Uz5XR6LLX+FATs9yj5DmHaPvPEn7NredlpQ9Fn9Wj9xdPa7msly8iKX08BMfXeXhe63LY/F30u+x1U4uAJALURigCsnipuqiymKnuWKlS20reGM+EoF68/FUxD+1G8bEv2KQBoAUcbAKtnuzWpu5Sul/HO3KuCF1+AHl+zgXUjFNWhfSNertqPAAA/4WgDYPW8M9wqum4jdLdJXXheqxuO7cY1pqyh+9KaaJnE6xDDhP0jda1Urkug2O10TOl6HwBYA442ADYhFXpypWbgSF3k3rfQve8sVaLjZYRhcttoSQuqN9+QonUKAGvH0QbAZqhyFXeP84oqg7XPThOK6iAUTSe1jZZ2KfXmHVIIRQC2gKMNgM3RiFsaZUuVLVv02FyjVtF9rg6F2XgZYZg+I9N57LxjCt3nAGwBoQgAAABA0whFAAAAAJpGKAIAAADQNEIRAAAAgKYRigAAAAA0jVAEAAAAoGmEIgAAAABNIxQBAAAAaBqhCAAAAEDDDof/B6OmAqAXJiL5AAAAAElFTkSuQmCC"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Point Chirality Example\n",
    "\n",
    "For the demonstration of how to work with these molecules, the following structure will be used to illustrate how point chirality is maintained. In addition, different functional groups are parsed into their expanded equivalent. Note: all structures should interpreted chemically, and all labels underneath the molecule should be BOLDED and NOT interpreted chemically!\n",
    "\n",
    "![Point_Chirality.PNG](attachment:Point_Chirality.PNG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17295271057526786\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17295271057526786\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17295271057526786 = null;\nvar warn = document.getElementById(\"3dmolwarning_17295271057526786\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17295271057526786 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271057526786\"),{backgroundColor:\"white\"});\nviewer_17295271057526786.zoomTo();\n\tviewer_17295271057526786.addModel(\"@<TRIPOS>MOLECULE\\nhigh_complexity_1\\n63 67 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -2.5986 0.0000 0.0000 N\\n2 None -3.8972 -0.7500 0.0000 C\\n3 None -5.1958 0.0000 0.0000 C\\n4 None -6.4944 -0.7500 0.0000 C\\n5 None -6.4944 -1.5000 1.2990 O\\n6 None -7.7944 0.0000 0.0000 C\\n7 None -7.7944 0.7500 1.2990 O\\n8 None -9.0931 -0.7500 0.0000 C\\n9 None -9.0931 -1.5000 -1.2990 O\\n10 None -10.3917 0.0000 0.0000 C\\n11 None -10.3917 0.7500 1.2990 O\\n12 None -11.6917 -0.7500 0.0000 C\\n13 None -11.6917 -1.5000 -1.2990 O\\n14 None -12.9903 0.0000 0.0000 C\\n15 None -14.2889 -0.7500 0.0000 C\\n16 None -14.2889 -1.5000 -1.2990 O\\n17 None -15.5889 0.0000 0.0000 C\\n18 None -16.8875 -0.7500 0.0000 C\\n19 None -8.3431 -2.1493 -2.4237 C\\n20 None -9.4042 -2.6799 -3.3426 C\\n21 None -8.6542 -3.3292 -4.4672 C\\n22 None -1.3000 -0.7500 0.0000 C\\n23 None 0.0000 0.0000 0.0000 C\\n24 None -1.2993 -1.5000 1.2990 C\\n25 None -2.5997 -1.8756 1.9475 N\\n26 None -5.1958 0.7500 1.2990 C\\n27 None -5.1958 0.0038 2.5927 O\\n28 None -5.1958 2.2434 1.2996 O\\n29 None -5.1958 4.4827 2.5920 C\\n30 None -5.1958 5.2292 3.8851 C\\n31 None -5.1958 6.7227 3.8856 C\\n32 None -5.1958 7.4689 2.5920 C\\n33 None -5.1958 6.7223 1.2990 C\\n34 None -5.1958 5.2296 1.2996 C\\n35 None -5.1958 2.9900 2.5926 C\\n36 None -12.9903 0.7500 1.2990 C\\n37 None -12.9903 0.0038 2.5927 C\\n38 None -12.9903 0.7503 3.8857 C\\n39 None -12.9903 2.2431 3.8851 C\\n40 None -12.9903 2.9900 2.5926 C\\n41 None -12.9903 2.2434 1.2996 C\\n42 None -10.1445 -3.7291 -2.5674 C\\n43 None -11.3492 -3.5109 -3.4223 F\\n44 None -10.8814 -4.7736 -1.7955 F\\n45 None -8.9403 -3.9482 -1.7116 F\\n46 None 1.2643 -0.7302 0.0000 N\\n47 None 7.9279 -2.7422 -0.9182 C\\n48 None 8.5755 -1.6233 -1.6645 C\\n49 None 7.5463 -0.5660 -1.8960 C\\n50 None 6.2633 -1.0328 -1.2921 C\\n51 None 6.4986 -2.3779 -0.6876 C\\n52 None 5.5971 -3.3171 0.0423 C\\n53 None 6.1256 -4.6217 0.5419 C\\n54 None 7.5538 -4.9865 0.3119 C\\n55 None 8.4564 -4.0467 -0.4186 C\\n56 None 9.9697 -1.4290 -2.1643 C\\n57 None 10.3343 -0.1790 -2.8945 C\\n58 None 9.3040 0.8778 -3.1254 C\\n59 None 7.9109 0.6840 -2.6262 C\\n60 None 4.9700 -0.2859 -1.2921 C\\n61 None 3.7632 -0.8818 -0.6458 O\\n62 None 2.4711 -0.1343 -0.6464 C\\n63 None 2.3847 1.2084 -1.2927 O\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 1\\n3 3 4 1\\n4 4 5 1\\n5 4 6 1\\n6 6 7 1\\n7 6 8 1\\n8 8 9 1\\n9 10 11 1\\n10 10 12 1\\n11 12 13 1\\n12 12 14 1\\n13 14 15 1\\n14 15 16 1\\n15 15 17 1\\n16 17 18 2\\n17 8 10 1\\n18 9 19 1\\n19 19 20 1\\n20 20 21 1\\n21 1 22 1\\n22 22 23 1\\n23 22 24 1\\n24 24 25 1\\n25 33 34 2\\n26 32 33 1\\n27 31 32 2\\n28 30 31 1\\n29 29 30 2\\n30 29 34 1\\n31 29 35 1\\n32 28 35 1\\n33 26 27 2\\n34 26 28 1\\n35 3 26 1\\n36 40 41 2\\n37 39 40 1\\n38 38 39 2\\n39 37 38 1\\n40 36 37 2\\n41 36 41 1\\n42 14 36 1\\n43 42 43 1\\n44 42 44 1\\n45 42 45 1\\n46 20 42 1\\n47 62 63 2\\n48 61 62 1\\n49 60 61 1\\n50 58 59 2\\n51 57 58 1\\n52 56 57 2\\n53 54 55 2\\n54 53 54 1\\n55 52 53 2\\n56 51 52 1\\n57 50 51 1\\n58 50 60 1\\n59 49 50 1\\n60 49 59 1\\n61 48 49 2\\n62 48 56 1\\n63 47 48 1\\n64 47 51 2\\n65 47 55 1\\n66 46 62 1\\n67 23 46 1\\n\\n\",\"mol2\");\n\tviewer_17295271057526786.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17295271057526786.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17295271057526786.zoomTo();\n\tviewer_17295271057526786.setBackgroundColor(\"white\");\nviewer_17295271057526786.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17295271057526786\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17295271057526786\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17295271057526786 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17295271057526786\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17295271057526786 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271057526786\"),{backgroundColor:\"white\"});\n",
       "viewer_17295271057526786.zoomTo();\n",
       "\tviewer_17295271057526786.addModel(\"@<TRIPOS>MOLECULE\\nhigh_complexity_1\\n63 67 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -2.5986 0.0000 0.0000 N\\n2 None -3.8972 -0.7500 0.0000 C\\n3 None -5.1958 0.0000 0.0000 C\\n4 None -6.4944 -0.7500 0.0000 C\\n5 None -6.4944 -1.5000 1.2990 O\\n6 None -7.7944 0.0000 0.0000 C\\n7 None -7.7944 0.7500 1.2990 O\\n8 None -9.0931 -0.7500 0.0000 C\\n9 None -9.0931 -1.5000 -1.2990 O\\n10 None -10.3917 0.0000 0.0000 C\\n11 None -10.3917 0.7500 1.2990 O\\n12 None -11.6917 -0.7500 0.0000 C\\n13 None -11.6917 -1.5000 -1.2990 O\\n14 None -12.9903 0.0000 0.0000 C\\n15 None -14.2889 -0.7500 0.0000 C\\n16 None -14.2889 -1.5000 -1.2990 O\\n17 None -15.5889 0.0000 0.0000 C\\n18 None -16.8875 -0.7500 0.0000 C\\n19 None -8.3431 -2.1493 -2.4237 C\\n20 None -9.4042 -2.6799 -3.3426 C\\n21 None -8.6542 -3.3292 -4.4672 C\\n22 None -1.3000 -0.7500 0.0000 C\\n23 None 0.0000 0.0000 0.0000 C\\n24 None -1.2993 -1.5000 1.2990 C\\n25 None -2.5997 -1.8756 1.9475 N\\n26 None -5.1958 0.7500 1.2990 C\\n27 None -5.1958 0.0038 2.5927 O\\n28 None -5.1958 2.2434 1.2996 O\\n29 None -5.1958 4.4827 2.5920 C\\n30 None -5.1958 5.2292 3.8851 C\\n31 None -5.1958 6.7227 3.8856 C\\n32 None -5.1958 7.4689 2.5920 C\\n33 None -5.1958 6.7223 1.2990 C\\n34 None -5.1958 5.2296 1.2996 C\\n35 None -5.1958 2.9900 2.5926 C\\n36 None -12.9903 0.7500 1.2990 C\\n37 None -12.9903 0.0038 2.5927 C\\n38 None -12.9903 0.7503 3.8857 C\\n39 None -12.9903 2.2431 3.8851 C\\n40 None -12.9903 2.9900 2.5926 C\\n41 None -12.9903 2.2434 1.2996 C\\n42 None -10.1445 -3.7291 -2.5674 C\\n43 None -11.3492 -3.5109 -3.4223 F\\n44 None -10.8814 -4.7736 -1.7955 F\\n45 None -8.9403 -3.9482 -1.7116 F\\n46 None 1.2643 -0.7302 0.0000 N\\n47 None 7.9279 -2.7422 -0.9182 C\\n48 None 8.5755 -1.6233 -1.6645 C\\n49 None 7.5463 -0.5660 -1.8960 C\\n50 None 6.2633 -1.0328 -1.2921 C\\n51 None 6.4986 -2.3779 -0.6876 C\\n52 None 5.5971 -3.3171 0.0423 C\\n53 None 6.1256 -4.6217 0.5419 C\\n54 None 7.5538 -4.9865 0.3119 C\\n55 None 8.4564 -4.0467 -0.4186 C\\n56 None 9.9697 -1.4290 -2.1643 C\\n57 None 10.3343 -0.1790 -2.8945 C\\n58 None 9.3040 0.8778 -3.1254 C\\n59 None 7.9109 0.6840 -2.6262 C\\n60 None 4.9700 -0.2859 -1.2921 C\\n61 None 3.7632 -0.8818 -0.6458 O\\n62 None 2.4711 -0.1343 -0.6464 C\\n63 None 2.3847 1.2084 -1.2927 O\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 1\\n3 3 4 1\\n4 4 5 1\\n5 4 6 1\\n6 6 7 1\\n7 6 8 1\\n8 8 9 1\\n9 10 11 1\\n10 10 12 1\\n11 12 13 1\\n12 12 14 1\\n13 14 15 1\\n14 15 16 1\\n15 15 17 1\\n16 17 18 2\\n17 8 10 1\\n18 9 19 1\\n19 19 20 1\\n20 20 21 1\\n21 1 22 1\\n22 22 23 1\\n23 22 24 1\\n24 24 25 1\\n25 33 34 2\\n26 32 33 1\\n27 31 32 2\\n28 30 31 1\\n29 29 30 2\\n30 29 34 1\\n31 29 35 1\\n32 28 35 1\\n33 26 27 2\\n34 26 28 1\\n35 3 26 1\\n36 40 41 2\\n37 39 40 1\\n38 38 39 2\\n39 37 38 1\\n40 36 37 2\\n41 36 41 1\\n42 14 36 1\\n43 42 43 1\\n44 42 44 1\\n45 42 45 1\\n46 20 42 1\\n47 62 63 2\\n48 61 62 1\\n49 60 61 1\\n50 58 59 2\\n51 57 58 1\\n52 56 57 2\\n53 54 55 2\\n54 53 54 1\\n55 52 53 2\\n56 51 52 1\\n57 50 51 1\\n58 50 60 1\\n59 49 50 1\\n60 49 59 1\\n61 48 49 2\\n62 48 56 1\\n63 47 48 1\\n64 47 51 2\\n65 47 55 1\\n66 46 62 1\\n67 23 46 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17295271057526786.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17295271057526786.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17295271057526786.zoomTo();\n",
       "\tviewer_17295271057526786.setBackgroundColor(\"white\");\n",
       "viewer_17295271057526786.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17295271057526786.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17295271057526786.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='high_complexity_1', formula='C47 F3 N3 O10')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The molecules can be accessed as the\n",
    "mol = cdxf[\"high_complexity_1\"]\n",
    "mol"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When chirality is detected, the parser rotates groups of atoms out of the 2D plane of the paper, much like a chemist's intuition would. The structure upon initial parsing does not have have hydrogens. These can be added via the method `add_implicit_hydrogens()`. This will not optimize the `Molecule` but gives a reasonable starting point."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17295271057814808\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17295271057814808\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17295271057814808 = null;\nvar warn = document.getElementById(\"3dmolwarning_17295271057814808\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17295271057814808 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271057814808\"),{backgroundColor:\"white\"});\nviewer_17295271057814808.zoomTo();\n\tviewer_17295271057814808.addModel(\"@<TRIPOS>MOLECULE\\nhigh_complexity_1\\n119 123 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -2.5986 0.0000 0.0000 N\\n2 None -3.8972 -0.7500 0.0000 C\\n3 None -5.1958 0.0000 0.0000 C\\n4 None -6.4944 -0.7500 0.0000 C\\n5 None -6.4944 -1.5000 1.2990 O\\n6 None -7.7944 0.0000 0.0000 C\\n7 None -7.7944 0.7500 1.2990 O\\n8 None -9.0931 -0.7500 0.0000 C\\n9 None -9.0931 -1.5000 -1.2990 O\\n10 None -10.3917 0.0000 0.0000 C\\n11 None -10.3917 0.7500 1.2990 O\\n12 None -11.6917 -0.7500 0.0000 C\\n13 None -11.6917 -1.5000 -1.2990 O\\n14 None -12.9903 0.0000 0.0000 C\\n15 None -14.2889 -0.7500 0.0000 C\\n16 None -14.2889 -1.5000 -1.2990 O\\n17 None -15.5889 0.0000 0.0000 C\\n18 None -16.8875 -0.7500 0.0000 C\\n19 None -8.3431 -2.1493 -2.4237 C\\n20 None -9.4042 -2.6799 -3.3426 C\\n21 None -8.6542 -3.3292 -4.4672 C\\n22 None -1.3000 -0.7500 0.0000 C\\n23 None 0.0000 0.0000 0.0000 C\\n24 None -1.2993 -1.5000 1.2990 C\\n25 None -2.5997 -1.8756 1.9475 N\\n26 None -5.1958 0.7500 1.2990 C\\n27 None -5.1958 0.0038 2.5927 O\\n28 None -5.1958 2.2434 1.2996 O\\n29 None -5.1958 4.4827 2.5920 C\\n30 None -5.1958 5.2292 3.8851 C\\n31 None -5.1958 6.7227 3.8856 C\\n32 None -5.1958 7.4689 2.5920 C\\n33 None -5.1958 6.7223 1.2990 C\\n34 None -5.1958 5.2296 1.2996 C\\n35 None -5.1958 2.9900 2.5926 C\\n36 None -12.9903 0.7500 1.2990 C\\n37 None -12.9903 0.0038 2.5927 C\\n38 None -12.9903 0.7503 3.8857 C\\n39 None -12.9903 2.2431 3.8851 C\\n40 None -12.9903 2.9900 2.5926 C\\n41 None -12.9903 2.2434 1.2996 C\\n42 None -10.1445 -3.7291 -2.5674 C\\n43 None -11.3492 -3.5109 -3.4223 F\\n44 None -10.8814 -4.7736 -1.7955 F\\n45 None -8.9403 -3.9482 -1.7116 F\\n46 None 1.2643 -0.7302 0.0000 N\\n47 None 7.9279 -2.7422 -0.9182 C\\n48 None 8.5755 -1.6233 -1.6645 C\\n49 None 7.5463 -0.5660 -1.8960 C\\n50 None 6.2633 -1.0328 -1.2921 C\\n51 None 6.4986 -2.3779 -0.6876 C\\n52 None 5.5971 -3.3171 0.0423 C\\n53 None 6.1256 -4.6217 0.5419 C\\n54 None 7.5538 -4.9865 0.3119 C\\n55 None 8.4564 -4.0467 -0.4186 C\\n56 None 9.9697 -1.4290 -2.1643 C\\n57 None 10.3343 -0.1790 -2.8945 C\\n58 None 9.3040 0.8778 -3.1254 C\\n59 None 7.9109 0.6840 -2.6262 C\\n60 None 4.9700 -0.2859 -1.2921 C\\n61 None 3.7632 -0.8818 -0.6458 O\\n62 None 2.4711 -0.1343 -0.6464 C\\n63 None 2.3847 1.2084 -1.2927 O\\n64 None -2.5986 1.0300 0.0000 H\\n65 None -3.8972 -1.3638 -0.8765 H\\n66 None -3.8972 -1.3638 0.8765 H\\n67 None -5.1958 0.7005 -0.8088 H\\n68 None -6.4944 -1.4505 -0.8088 H\\n69 None -6.4944 -1.9750 2.1218 H\\n70 None -7.7944 0.7005 -0.8088 H\\n71 None -7.7944 1.2250 2.1218 H\\n72 None -9.0931 -1.4505 0.8088 H\\n73 None -10.3917 0.7005 -0.8088 H\\n74 None -10.3917 1.2250 2.1218 H\\n75 None -11.6917 -1.4505 0.8088 H\\n76 None -11.6917 -1.9750 -2.1218 H\\n77 None -12.9903 0.7005 -0.8088 H\\n78 None -14.2889 -1.4505 0.8088 H\\n79 None -14.2889 -1.9750 -2.1218 H\\n80 None -15.5899 1.0700 0.0000 H\\n81 None -17.8574 -0.2979 0.0000 H\\n82 None -16.9806 -1.8160 0.0000 H\\n83 None -7.7345 -1.4301 -2.9311 H\\n84 None -7.7345 -2.9483 -2.0545 H\\n85 None -10.0555 -1.9055 -3.6905 H\\n86 None -7.6112 -3.3588 -4.2302 H\\n87 None -8.8000 -2.7660 -5.3653 H\\n88 None -9.0162 -4.3261 -4.6087 H\\n89 None -1.3000 -1.4505 -0.8088 H\\n90 None 0.0148 0.6136 -0.8765 H\\n91 None 0.0148 0.6136 0.8765 H\\n92 None -0.7670 -2.4121 1.1266 H\\n93 None -0.7684 -0.8939 2.0031 H\\n94 None -3.3457 -1.2128 2.2028 H\\n95 None -2.8774 -2.8341 2.2028 H\\n96 None -5.1958 4.6938 4.8115 H\\n97 None -5.1958 7.2577 4.8123 H\\n98 None -5.1958 8.5389 2.5916 H\\n99 None -5.1958 7.2570 0.3721 H\\n100 None -5.1958 4.6946 0.3729 H\\n101 None -4.3193 2.6833 3.1243 H\\n102 None -6.0724 2.6833 3.1243 H\\n103 None -12.9903 -1.0662 2.5931 H\\n104 None -12.9903 0.2157 4.8126 H\\n105 None -12.9903 2.7781 4.8117 H\\n106 None -12.9903 4.0600 2.5931 H\\n107 None -12.9903 2.7788 0.3732 H\\n108 None 1.3044 -1.6553 0.4510 H\\n109 None 5.9957 -1.4961 -2.2188 H\\n110 None 4.5728 -3.0554 0.2072 H\\n111 None 5.4802 -5.2958 1.0653 H\\n112 None 7.9305 -5.9215 0.6706 H\\n113 None 9.4808 -4.3079 -0.5838 H\\n114 None 10.7078 -2.1858 -1.9990 H\\n115 None 11.3333 -0.0406 -3.2521 H\\n116 None 9.5640 1.7742 -3.6486 H\\n117 None 7.1734 1.4413 -2.7919 H\\n118 None 4.7153 -0.1134 -2.3170 H\\n119 None 5.1537 0.6457 -0.7988 H\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 1\\n3 3 4 1\\n4 4 5 1\\n5 4 6 1\\n6 6 7 1\\n7 6 8 1\\n8 8 9 1\\n9 10 11 1\\n10 10 12 1\\n11 12 13 1\\n12 12 14 1\\n13 14 15 1\\n14 15 16 1\\n15 15 17 1\\n16 17 18 2\\n17 8 10 1\\n18 9 19 1\\n19 19 20 1\\n20 20 21 1\\n21 1 22 1\\n22 22 23 1\\n23 22 24 1\\n24 24 25 1\\n25 33 34 2\\n26 32 33 1\\n27 31 32 2\\n28 30 31 1\\n29 29 30 2\\n30 29 34 1\\n31 29 35 1\\n32 28 35 1\\n33 26 27 2\\n34 26 28 1\\n35 3 26 1\\n36 40 41 2\\n37 39 40 1\\n38 38 39 2\\n39 37 38 1\\n40 36 37 2\\n41 36 41 1\\n42 14 36 1\\n43 42 43 1\\n44 42 44 1\\n45 42 45 1\\n46 20 42 1\\n47 62 63 2\\n48 61 62 1\\n49 60 61 1\\n50 58 59 2\\n51 57 58 1\\n52 56 57 2\\n53 54 55 2\\n54 53 54 1\\n55 52 53 2\\n56 51 52 1\\n57 50 51 1\\n58 50 60 1\\n59 49 50 1\\n60 49 59 1\\n61 48 49 2\\n62 48 56 1\\n63 47 48 1\\n64 47 51 2\\n65 47 55 1\\n66 46 62 1\\n67 23 46 1\\n68 1 64 1\\n69 2 65 1\\n70 2 66 1\\n71 3 67 1\\n72 4 68 1\\n73 5 69 1\\n74 6 70 1\\n75 7 71 1\\n76 8 72 1\\n77 10 73 1\\n78 11 74 1\\n79 12 75 1\\n80 13 76 1\\n81 14 77 1\\n82 15 78 1\\n83 16 79 1\\n84 17 80 1\\n85 18 81 1\\n86 18 82 1\\n87 19 83 1\\n88 19 84 1\\n89 20 85 1\\n90 21 86 1\\n91 21 87 1\\n92 21 88 1\\n93 22 89 1\\n94 23 90 1\\n95 23 91 1\\n96 24 92 1\\n97 24 93 1\\n98 25 94 1\\n99 25 95 1\\n100 30 96 1\\n101 31 97 1\\n102 32 98 1\\n103 33 99 1\\n104 34 100 1\\n105 35 101 1\\n106 35 102 1\\n107 37 103 1\\n108 38 104 1\\n109 39 105 1\\n110 40 106 1\\n111 41 107 1\\n112 46 108 1\\n113 50 109 1\\n114 52 110 1\\n115 53 111 1\\n116 54 112 1\\n117 55 113 1\\n118 56 114 1\\n119 57 115 1\\n120 58 116 1\\n121 59 117 1\\n122 60 118 1\\n123 60 119 1\\n\\n\",\"mol2\");\n\tviewer_17295271057814808.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17295271057814808.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17295271057814808.zoomTo();\n\tviewer_17295271057814808.setBackgroundColor(\"white\");\nviewer_17295271057814808.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17295271057814808\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17295271057814808\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17295271057814808 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17295271057814808\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17295271057814808 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271057814808\"),{backgroundColor:\"white\"});\n",
       "viewer_17295271057814808.zoomTo();\n",
       "\tviewer_17295271057814808.addModel(\"@<TRIPOS>MOLECULE\\nhigh_complexity_1\\n119 123 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -2.5986 0.0000 0.0000 N\\n2 None -3.8972 -0.7500 0.0000 C\\n3 None -5.1958 0.0000 0.0000 C\\n4 None -6.4944 -0.7500 0.0000 C\\n5 None -6.4944 -1.5000 1.2990 O\\n6 None -7.7944 0.0000 0.0000 C\\n7 None -7.7944 0.7500 1.2990 O\\n8 None -9.0931 -0.7500 0.0000 C\\n9 None -9.0931 -1.5000 -1.2990 O\\n10 None -10.3917 0.0000 0.0000 C\\n11 None -10.3917 0.7500 1.2990 O\\n12 None -11.6917 -0.7500 0.0000 C\\n13 None -11.6917 -1.5000 -1.2990 O\\n14 None -12.9903 0.0000 0.0000 C\\n15 None -14.2889 -0.7500 0.0000 C\\n16 None -14.2889 -1.5000 -1.2990 O\\n17 None -15.5889 0.0000 0.0000 C\\n18 None -16.8875 -0.7500 0.0000 C\\n19 None -8.3431 -2.1493 -2.4237 C\\n20 None -9.4042 -2.6799 -3.3426 C\\n21 None -8.6542 -3.3292 -4.4672 C\\n22 None -1.3000 -0.7500 0.0000 C\\n23 None 0.0000 0.0000 0.0000 C\\n24 None -1.2993 -1.5000 1.2990 C\\n25 None -2.5997 -1.8756 1.9475 N\\n26 None -5.1958 0.7500 1.2990 C\\n27 None -5.1958 0.0038 2.5927 O\\n28 None -5.1958 2.2434 1.2996 O\\n29 None -5.1958 4.4827 2.5920 C\\n30 None -5.1958 5.2292 3.8851 C\\n31 None -5.1958 6.7227 3.8856 C\\n32 None -5.1958 7.4689 2.5920 C\\n33 None -5.1958 6.7223 1.2990 C\\n34 None -5.1958 5.2296 1.2996 C\\n35 None -5.1958 2.9900 2.5926 C\\n36 None -12.9903 0.7500 1.2990 C\\n37 None -12.9903 0.0038 2.5927 C\\n38 None -12.9903 0.7503 3.8857 C\\n39 None -12.9903 2.2431 3.8851 C\\n40 None -12.9903 2.9900 2.5926 C\\n41 None -12.9903 2.2434 1.2996 C\\n42 None -10.1445 -3.7291 -2.5674 C\\n43 None -11.3492 -3.5109 -3.4223 F\\n44 None -10.8814 -4.7736 -1.7955 F\\n45 None -8.9403 -3.9482 -1.7116 F\\n46 None 1.2643 -0.7302 0.0000 N\\n47 None 7.9279 -2.7422 -0.9182 C\\n48 None 8.5755 -1.6233 -1.6645 C\\n49 None 7.5463 -0.5660 -1.8960 C\\n50 None 6.2633 -1.0328 -1.2921 C\\n51 None 6.4986 -2.3779 -0.6876 C\\n52 None 5.5971 -3.3171 0.0423 C\\n53 None 6.1256 -4.6217 0.5419 C\\n54 None 7.5538 -4.9865 0.3119 C\\n55 None 8.4564 -4.0467 -0.4186 C\\n56 None 9.9697 -1.4290 -2.1643 C\\n57 None 10.3343 -0.1790 -2.8945 C\\n58 None 9.3040 0.8778 -3.1254 C\\n59 None 7.9109 0.6840 -2.6262 C\\n60 None 4.9700 -0.2859 -1.2921 C\\n61 None 3.7632 -0.8818 -0.6458 O\\n62 None 2.4711 -0.1343 -0.6464 C\\n63 None 2.3847 1.2084 -1.2927 O\\n64 None -2.5986 1.0300 0.0000 H\\n65 None -3.8972 -1.3638 -0.8765 H\\n66 None -3.8972 -1.3638 0.8765 H\\n67 None -5.1958 0.7005 -0.8088 H\\n68 None -6.4944 -1.4505 -0.8088 H\\n69 None -6.4944 -1.9750 2.1218 H\\n70 None -7.7944 0.7005 -0.8088 H\\n71 None -7.7944 1.2250 2.1218 H\\n72 None -9.0931 -1.4505 0.8088 H\\n73 None -10.3917 0.7005 -0.8088 H\\n74 None -10.3917 1.2250 2.1218 H\\n75 None -11.6917 -1.4505 0.8088 H\\n76 None -11.6917 -1.9750 -2.1218 H\\n77 None -12.9903 0.7005 -0.8088 H\\n78 None -14.2889 -1.4505 0.8088 H\\n79 None -14.2889 -1.9750 -2.1218 H\\n80 None -15.5899 1.0700 0.0000 H\\n81 None -17.8574 -0.2979 0.0000 H\\n82 None -16.9806 -1.8160 0.0000 H\\n83 None -7.7345 -1.4301 -2.9311 H\\n84 None -7.7345 -2.9483 -2.0545 H\\n85 None -10.0555 -1.9055 -3.6905 H\\n86 None -7.6112 -3.3588 -4.2302 H\\n87 None -8.8000 -2.7660 -5.3653 H\\n88 None -9.0162 -4.3261 -4.6087 H\\n89 None -1.3000 -1.4505 -0.8088 H\\n90 None 0.0148 0.6136 -0.8765 H\\n91 None 0.0148 0.6136 0.8765 H\\n92 None -0.7670 -2.4121 1.1266 H\\n93 None -0.7684 -0.8939 2.0031 H\\n94 None -3.3457 -1.2128 2.2028 H\\n95 None -2.8774 -2.8341 2.2028 H\\n96 None -5.1958 4.6938 4.8115 H\\n97 None -5.1958 7.2577 4.8123 H\\n98 None -5.1958 8.5389 2.5916 H\\n99 None -5.1958 7.2570 0.3721 H\\n100 None -5.1958 4.6946 0.3729 H\\n101 None -4.3193 2.6833 3.1243 H\\n102 None -6.0724 2.6833 3.1243 H\\n103 None -12.9903 -1.0662 2.5931 H\\n104 None -12.9903 0.2157 4.8126 H\\n105 None -12.9903 2.7781 4.8117 H\\n106 None -12.9903 4.0600 2.5931 H\\n107 None -12.9903 2.7788 0.3732 H\\n108 None 1.3044 -1.6553 0.4510 H\\n109 None 5.9957 -1.4961 -2.2188 H\\n110 None 4.5728 -3.0554 0.2072 H\\n111 None 5.4802 -5.2958 1.0653 H\\n112 None 7.9305 -5.9215 0.6706 H\\n113 None 9.4808 -4.3079 -0.5838 H\\n114 None 10.7078 -2.1858 -1.9990 H\\n115 None 11.3333 -0.0406 -3.2521 H\\n116 None 9.5640 1.7742 -3.6486 H\\n117 None 7.1734 1.4413 -2.7919 H\\n118 None 4.7153 -0.1134 -2.3170 H\\n119 None 5.1537 0.6457 -0.7988 H\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 1\\n3 3 4 1\\n4 4 5 1\\n5 4 6 1\\n6 6 7 1\\n7 6 8 1\\n8 8 9 1\\n9 10 11 1\\n10 10 12 1\\n11 12 13 1\\n12 12 14 1\\n13 14 15 1\\n14 15 16 1\\n15 15 17 1\\n16 17 18 2\\n17 8 10 1\\n18 9 19 1\\n19 19 20 1\\n20 20 21 1\\n21 1 22 1\\n22 22 23 1\\n23 22 24 1\\n24 24 25 1\\n25 33 34 2\\n26 32 33 1\\n27 31 32 2\\n28 30 31 1\\n29 29 30 2\\n30 29 34 1\\n31 29 35 1\\n32 28 35 1\\n33 26 27 2\\n34 26 28 1\\n35 3 26 1\\n36 40 41 2\\n37 39 40 1\\n38 38 39 2\\n39 37 38 1\\n40 36 37 2\\n41 36 41 1\\n42 14 36 1\\n43 42 43 1\\n44 42 44 1\\n45 42 45 1\\n46 20 42 1\\n47 62 63 2\\n48 61 62 1\\n49 60 61 1\\n50 58 59 2\\n51 57 58 1\\n52 56 57 2\\n53 54 55 2\\n54 53 54 1\\n55 52 53 2\\n56 51 52 1\\n57 50 51 1\\n58 50 60 1\\n59 49 50 1\\n60 49 59 1\\n61 48 49 2\\n62 48 56 1\\n63 47 48 1\\n64 47 51 2\\n65 47 55 1\\n66 46 62 1\\n67 23 46 1\\n68 1 64 1\\n69 2 65 1\\n70 2 66 1\\n71 3 67 1\\n72 4 68 1\\n73 5 69 1\\n74 6 70 1\\n75 7 71 1\\n76 8 72 1\\n77 10 73 1\\n78 11 74 1\\n79 12 75 1\\n80 13 76 1\\n81 14 77 1\\n82 15 78 1\\n83 16 79 1\\n84 17 80 1\\n85 18 81 1\\n86 18 82 1\\n87 19 83 1\\n88 19 84 1\\n89 20 85 1\\n90 21 86 1\\n91 21 87 1\\n92 21 88 1\\n93 22 89 1\\n94 23 90 1\\n95 23 91 1\\n96 24 92 1\\n97 24 93 1\\n98 25 94 1\\n99 25 95 1\\n100 30 96 1\\n101 31 97 1\\n102 32 98 1\\n103 33 99 1\\n104 34 100 1\\n105 35 101 1\\n106 35 102 1\\n107 37 103 1\\n108 38 104 1\\n109 39 105 1\\n110 40 106 1\\n111 41 107 1\\n112 46 108 1\\n113 50 109 1\\n114 52 110 1\\n115 53 111 1\\n116 54 112 1\\n117 55 113 1\\n118 56 114 1\\n119 57 115 1\\n120 58 116 1\\n121 59 117 1\\n122 60 118 1\\n123 60 119 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17295271057814808.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17295271057814808.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17295271057814808.zoomTo();\n",
       "\tviewer_17295271057814808.setBackgroundColor(\"white\");\n",
       "viewer_17295271057814808.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17295271057814808.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17295271057814808.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='high_complexity_1', formula='C47 H56 F3 N3 O10')"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Adds implicit hydrogens to Molecule\n",
    "mol.add_implicit_hydrogens()\n",
    "mol"
   ]
  },
  {
   "attachments": {
    "Taxadiene.PNG": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Reading Label Example\n",
    "\n",
    "One of the most useful features of the CDXML parser is that unique labels can be maintained from the original `CDXML` file. For those that are unaware, it is possible to add your own labels by selecting an atom in the ChemDraw file, clicking the `'` key, then typing your unique label. `molli` maintains whatever label is used and assigns it to the atom once it is read in. This can be leveraged in downstream tasks if certain atoms are important, especially if lists of atoms get instantiated arbitrarily.\n",
    "\n",
    "An example of this will be shown with the molecule below\n",
    "\n",
    "![Taxadiene.PNG](attachment:Taxadiene.PNG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17295271057966053\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17295271057966053\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17295271057966053 = null;\nvar warn = document.getElementById(\"3dmolwarning_17295271057966053\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17295271057966053 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271057966053\"),{backgroundColor:\"white\"});\nviewer_17295271057966053.zoomTo();\n\tviewer_17295271057966053.addModel(\"@<TRIPOS>MOLECULE\\ntaxadiene\\n52 54 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None 2.5597 -1.5611 -1.5000 C\\n2 None 3.6208 -0.5000 -1.5000 C\\n3 None 4.9194 -1.2500 -1.5000 C\\n4 None 4.9194 -2.7500 -1.5000 C\\n5 None 6.2194 -0.5000 -1.5000 C\\n6 None 6.2194 1.0000 -1.5000 C\\n7 None 4.9194 1.7500 -1.5000 C\\n8 None 3.6208 1.0000 -1.5000 C\\n9 None 3.6208 1.0000 0.0003 C\\n10 2 2.5597 2.0611 -1.5000 C\\n11 1 1.0597 2.0611 -1.5000 C\\n12 None 0.0000 1.5000 -0.7500 C\\n13 None -1.3083 0.3444 -1.5000 C\\n14 None -1.9576 0.7194 -0.2013 C\\n15 None -1.4653 -1.1097 -1.5000 C\\n16 None -0.3264 -2.0264 -1.5000 C\\n17 None 1.0597 -1.5611 -1.5000 C\\n18 None 0.0000 0.0000 0.0000 C\\n19 None -0.8140 -1.2599 0.0000 C\\n20 None 1.4487 0.3889 0.0000 C\\n21 None 2.9687 -2.5499 -1.5000 H\\n22 None 5.9283 -3.1067 -1.5000 H\\n23 None 4.4150 -3.1067 -2.3737 H\\n24 None 4.4150 -3.1067 -0.6263 H\\n25 None 6.7511 -0.8067 -0.6235 H\\n26 None 6.7511 -0.8067 -2.3765 H\\n27 None 6.7511 1.3067 -0.6235 H\\n28 None 6.7511 1.3067 -2.3765 H\\n29 None 4.9189 2.3638 -0.6235 H\\n30 None 4.9189 2.3638 -2.3765 H\\n31 None 3.2104 0.0785 0.3570 H\\n32 None 3.0280 1.8162 0.3570 H\\n33 None 4.6241 1.1053 0.3570 H\\n34 None 2.7943 2.6283 -0.6235 H\\n35 None 2.7943 2.6283 -2.3765 H\\n36 None 0.7986 3.0957 -1.4197 H\\n37 None 0.7986 1.6920 -2.4698 H\\n38 None -0.5150 2.2104 -0.1377 H\\n39 None -1.7404 0.8311 -2.3493 H\\n40 None -2.5149 1.6239 -0.3292 H\\n41 None -1.2046 0.8669 0.5445 H\\n42 None -2.6167 -0.0649 0.1075 H\\n43 None -2.0322 -1.3449 -0.6235 H\\n44 None -2.0322 -1.3449 -2.3765 H\\n45 None -0.4345 -2.6305 -0.6235 H\\n46 None -0.4345 -2.6305 -2.3765 H\\n47 None -0.2958 -2.0193 -0.5474 H\\n48 None -1.7616 -1.0723 -0.4601 H\\n49 None -0.9652 -1.5869 1.0075 H\\n50 None 1.8610 0.2288 0.9743 H\\n51 None 1.5405 1.4226 -0.2606 H\\n52 None 1.9780 -0.2072 -0.7137 H\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 2\\n3 3 4 1\\n4 3 5 1\\n5 5 6 1\\n6 6 7 1\\n7 7 8 1\\n8 2 8 1\\n9 8 9 1\\n10 8 10 1\\n11 10 11 1\\n12 11 12 1\\n13 12 13 1\\n14 13 14 1\\n15 13 15 1\\n16 15 16 1\\n17 16 17 1\\n18 1 17 2\\n19 17 18 1\\n20 12 18 1\\n21 18 19 1\\n22 18 20 1\\n23 1 21 1\\n24 4 22 1\\n25 4 23 1\\n26 4 24 1\\n27 5 25 1\\n28 5 26 1\\n29 6 27 1\\n30 6 28 1\\n31 7 29 1\\n32 7 30 1\\n33 9 31 1\\n34 9 32 1\\n35 9 33 1\\n36 10 34 1\\n37 10 35 1\\n38 11 36 1\\n39 11 37 1\\n40 12 38 1\\n41 13 39 1\\n42 14 40 1\\n43 14 41 1\\n44 14 42 1\\n45 15 43 1\\n46 15 44 1\\n47 16 45 1\\n48 16 46 1\\n49 19 47 1\\n50 19 48 1\\n51 19 49 1\\n52 20 50 1\\n53 20 51 1\\n54 20 52 1\\n\\n\",\"mol2\");\n\tviewer_17295271057966053.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17295271057966053.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17295271057966053.zoomTo();\n\tviewer_17295271057966053.setBackgroundColor(\"white\");\nviewer_17295271057966053.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17295271057966053\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17295271057966053\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17295271057966053 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17295271057966053\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17295271057966053 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271057966053\"),{backgroundColor:\"white\"});\n",
       "viewer_17295271057966053.zoomTo();\n",
       "\tviewer_17295271057966053.addModel(\"@<TRIPOS>MOLECULE\\ntaxadiene\\n52 54 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None 2.5597 -1.5611 -1.5000 C\\n2 None 3.6208 -0.5000 -1.5000 C\\n3 None 4.9194 -1.2500 -1.5000 C\\n4 None 4.9194 -2.7500 -1.5000 C\\n5 None 6.2194 -0.5000 -1.5000 C\\n6 None 6.2194 1.0000 -1.5000 C\\n7 None 4.9194 1.7500 -1.5000 C\\n8 None 3.6208 1.0000 -1.5000 C\\n9 None 3.6208 1.0000 0.0003 C\\n10 2 2.5597 2.0611 -1.5000 C\\n11 1 1.0597 2.0611 -1.5000 C\\n12 None 0.0000 1.5000 -0.7500 C\\n13 None -1.3083 0.3444 -1.5000 C\\n14 None -1.9576 0.7194 -0.2013 C\\n15 None -1.4653 -1.1097 -1.5000 C\\n16 None -0.3264 -2.0264 -1.5000 C\\n17 None 1.0597 -1.5611 -1.5000 C\\n18 None 0.0000 0.0000 0.0000 C\\n19 None -0.8140 -1.2599 0.0000 C\\n20 None 1.4487 0.3889 0.0000 C\\n21 None 2.9687 -2.5499 -1.5000 H\\n22 None 5.9283 -3.1067 -1.5000 H\\n23 None 4.4150 -3.1067 -2.3737 H\\n24 None 4.4150 -3.1067 -0.6263 H\\n25 None 6.7511 -0.8067 -0.6235 H\\n26 None 6.7511 -0.8067 -2.3765 H\\n27 None 6.7511 1.3067 -0.6235 H\\n28 None 6.7511 1.3067 -2.3765 H\\n29 None 4.9189 2.3638 -0.6235 H\\n30 None 4.9189 2.3638 -2.3765 H\\n31 None 3.2104 0.0785 0.3570 H\\n32 None 3.0280 1.8162 0.3570 H\\n33 None 4.6241 1.1053 0.3570 H\\n34 None 2.7943 2.6283 -0.6235 H\\n35 None 2.7943 2.6283 -2.3765 H\\n36 None 0.7986 3.0957 -1.4197 H\\n37 None 0.7986 1.6920 -2.4698 H\\n38 None -0.5150 2.2104 -0.1377 H\\n39 None -1.7404 0.8311 -2.3493 H\\n40 None -2.5149 1.6239 -0.3292 H\\n41 None -1.2046 0.8669 0.5445 H\\n42 None -2.6167 -0.0649 0.1075 H\\n43 None -2.0322 -1.3449 -0.6235 H\\n44 None -2.0322 -1.3449 -2.3765 H\\n45 None -0.4345 -2.6305 -0.6235 H\\n46 None -0.4345 -2.6305 -2.3765 H\\n47 None -0.2958 -2.0193 -0.5474 H\\n48 None -1.7616 -1.0723 -0.4601 H\\n49 None -0.9652 -1.5869 1.0075 H\\n50 None 1.8610 0.2288 0.9743 H\\n51 None 1.5405 1.4226 -0.2606 H\\n52 None 1.9780 -0.2072 -0.7137 H\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 2\\n3 3 4 1\\n4 3 5 1\\n5 5 6 1\\n6 6 7 1\\n7 7 8 1\\n8 2 8 1\\n9 8 9 1\\n10 8 10 1\\n11 10 11 1\\n12 11 12 1\\n13 12 13 1\\n14 13 14 1\\n15 13 15 1\\n16 15 16 1\\n17 16 17 1\\n18 1 17 2\\n19 17 18 1\\n20 12 18 1\\n21 18 19 1\\n22 18 20 1\\n23 1 21 1\\n24 4 22 1\\n25 4 23 1\\n26 4 24 1\\n27 5 25 1\\n28 5 26 1\\n29 6 27 1\\n30 6 28 1\\n31 7 29 1\\n32 7 30 1\\n33 9 31 1\\n34 9 32 1\\n35 9 33 1\\n36 10 34 1\\n37 10 35 1\\n38 11 36 1\\n39 11 37 1\\n40 12 38 1\\n41 13 39 1\\n42 14 40 1\\n43 14 41 1\\n44 14 42 1\\n45 15 43 1\\n46 15 44 1\\n47 16 45 1\\n48 16 46 1\\n49 19 47 1\\n50 19 48 1\\n51 19 49 1\\n52 20 50 1\\n53 20 51 1\\n54 20 52 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17295271057966053.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17295271057966053.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17295271057966053.zoomTo();\n",
       "\tviewer_17295271057966053.setBackgroundColor(\"white\");\n",
       "viewer_17295271057966053.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17295271057966053.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17295271057966053.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='taxadiene', formula='C20 H32')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#This accesses the molecule\n",
    "m = cdxf[\"taxadiene\"]\n",
    "\n",
    "#This adds implicit hydrogens\n",
    "m.add_implicit_hydrogens()\n",
    "m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This illustrates that regardless of the `Molecule` instantiation, the labels are maintained."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label='2', formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label='1', formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=C, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n",
      "Atom(element=H, isotope=None, label=None, formal_charge=0, formal_spin=0)\n"
     ]
    }
   ],
   "source": [
    "#This prints the full atom, including the labels\n",
    "for atom in m.atoms:\n",
    "    print(atom)\n"
   ]
  },
  {
   "attachments": {
    "AxialChirality.PNG": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Axial Chirality Example\n",
    "\n",
    "The `molli` CDXML parser also has the ability to parse axial chirality. It moves groups of atoms based on the boldness of certain bonds. This has been tested on a variety of structures, and upon force-field optimization, the structures never invert. Here is an example of an axial chiral structure that can be parsed.\n",
    "\n",
    "![AxialChirality.PNG](attachment:AxialChirality.PNG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17295271058185933\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17295271058185933\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17295271058185933 = null;\nvar warn = document.getElementById(\"3dmolwarning_17295271058185933\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17295271058185933 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271058185933\"),{backgroundColor:\"white\"});\nviewer_17295271058185933.zoomTo();\n\tviewer_17295271058185933.addModel(\"@<TRIPOS>MOLECULE\\nr_binol\\n22 25 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -2.9524 3.0000 0.0000 C\\n2 None -2.9524 1.5000 0.0000 C\\n3 None -1.6538 0.7500 0.0000 C\\n4 None -0.3538 1.5000 0.0000 C\\n5 None -0.3538 3.0000 0.0000 C\\n6 None -1.6538 3.7500 0.0000 C\\n7 None 0.9448 0.7500 1.0000 C\\n8 None 2.2434 1.5000 2.0000 C\\n9 None 2.2434 3.0000 2.0000 C\\n10 None 0.9448 3.7500 1.0000 C\\n11 None 0.9448 -0.7500 1.0000 C\\n12 None -0.3538 -1.5000 1.0000 C\\n13 None -0.3538 -3.0000 1.0000 C\\n14 None 0.9448 -3.7500 1.0000 C\\n15 None 2.2434 -3.0000 1.0000 C\\n16 None 2.2434 -1.5000 1.0000 C\\n17 None -1.6538 -0.7500 2.0000 C\\n18 None -2.9524 -1.5000 3.0000 C\\n19 None -2.9524 -3.0000 3.0000 C\\n20 None -1.6538 -3.7500 2.0000 C\\n21 None 3.5434 0.7500 2.0000 O\\n22 None 3.5434 -0.7500 1.0000 O\\n@<TRIPOS>BOND\\n1 1 2 2\\n2 2 3 1\\n3 3 4 2\\n4 4 5 1\\n5 5 6 2\\n6 6 1 1\\n7 4 7 1\\n8 7 8 2\\n9 8 9 1\\n10 9 10 2\\n11 10 5 1\\n12 7 11 1\\n13 11 12 2\\n14 12 13 1\\n15 13 14 2\\n16 14 15 1\\n17 15 16 2\\n18 16 11 1\\n19 12 17 1\\n20 17 18 2\\n21 18 19 1\\n22 19 20 2\\n23 20 13 1\\n24 8 21 1\\n25 16 22 1\\n\\n\",\"mol2\");\n\tviewer_17295271058185933.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17295271058185933.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17295271058185933.zoomTo();\n\tviewer_17295271058185933.setBackgroundColor(\"white\");\nviewer_17295271058185933.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17295271058185933\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17295271058185933\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17295271058185933 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17295271058185933\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17295271058185933 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271058185933\"),{backgroundColor:\"white\"});\n",
       "viewer_17295271058185933.zoomTo();\n",
       "\tviewer_17295271058185933.addModel(\"@<TRIPOS>MOLECULE\\nr_binol\\n22 25 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -2.9524 3.0000 0.0000 C\\n2 None -2.9524 1.5000 0.0000 C\\n3 None -1.6538 0.7500 0.0000 C\\n4 None -0.3538 1.5000 0.0000 C\\n5 None -0.3538 3.0000 0.0000 C\\n6 None -1.6538 3.7500 0.0000 C\\n7 None 0.9448 0.7500 1.0000 C\\n8 None 2.2434 1.5000 2.0000 C\\n9 None 2.2434 3.0000 2.0000 C\\n10 None 0.9448 3.7500 1.0000 C\\n11 None 0.9448 -0.7500 1.0000 C\\n12 None -0.3538 -1.5000 1.0000 C\\n13 None -0.3538 -3.0000 1.0000 C\\n14 None 0.9448 -3.7500 1.0000 C\\n15 None 2.2434 -3.0000 1.0000 C\\n16 None 2.2434 -1.5000 1.0000 C\\n17 None -1.6538 -0.7500 2.0000 C\\n18 None -2.9524 -1.5000 3.0000 C\\n19 None -2.9524 -3.0000 3.0000 C\\n20 None -1.6538 -3.7500 2.0000 C\\n21 None 3.5434 0.7500 2.0000 O\\n22 None 3.5434 -0.7500 1.0000 O\\n@<TRIPOS>BOND\\n1 1 2 2\\n2 2 3 1\\n3 3 4 2\\n4 4 5 1\\n5 5 6 2\\n6 6 1 1\\n7 4 7 1\\n8 7 8 2\\n9 8 9 1\\n10 9 10 2\\n11 10 5 1\\n12 7 11 1\\n13 11 12 2\\n14 12 13 1\\n15 13 14 2\\n16 14 15 1\\n17 15 16 2\\n18 16 11 1\\n19 12 17 1\\n20 17 18 2\\n21 18 19 1\\n22 19 20 2\\n23 20 13 1\\n24 8 21 1\\n25 16 22 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17295271058185933.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17295271058185933.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17295271058185933.zoomTo();\n",
       "\tviewer_17295271058185933.setBackgroundColor(\"white\");\n",
       "viewer_17295271058185933.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17295271058185933.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17295271058185933.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='r_binol', formula='C20 O2')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# This accesses the molecule\n",
    "m = cdxf['r_binol']\n",
    "m"
   ]
  },
  {
   "attachments": {
    "Taniaphos.PNG": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Planar Chirality Example\n",
    "\n",
    "`molli` has the ability to parse multi-attachment points and actually maintain a significant amount of information about bonding information that is often difficult to access with the `CDXML` format. The first example illustrates maintaining both planar AND point chirality at the same time.\n",
    "\n",
    "![Taniaphos.PNG](attachment:Taniaphos.PNG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_1729527105844459\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_1729527105844459\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_1729527105844459 = null;\nvar warn = document.getElementById(\"3dmolwarning_1729527105844459\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_1729527105844459 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_1729527105844459\"),{backgroundColor:\"white\"});\nviewer_1729527105844459.zoomTo();\n\tviewer_1729527105844459.addModel(\"@<TRIPOS>MOLECULE\\nTaniaphos\\n47 61 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -6.3861 0.2778 -0.7500 C\\n2 None -6.9319 -0.0042 0.0000 C\\n3 None -5.5097 0.0208 2.2500 C\\n4 None -4.0986 0.0000 0.0000 C\\n5 None -4.6361 0.2653 -0.7500 C\\n6 None -6.8611 -3.0458 0.0000 C\\n7 None -6.3333 -3.6931 1.7500 C\\n8 None -4.5292 -3.7042 1.7500 C\\n9 None -3.9472 -3.0653 0.0000 C\\n10 None -5.3806 -3.1611 -0.7500 C\\n11 None -5.4403 -2.1417 0.7500 Fe\\n12 None -2.7986 -0.7500 0.0000 C\\n13 None 0.0000 0.0000 0.0000 C\\n14 None 0.7500 1.2986 0.0000 C\\n15 None 0.0000 2.5972 0.0000 C\\n16 None -1.5000 2.5972 0.0000 C\\n17 None -2.2500 1.2986 0.0000 C\\n18 None -1.5000 0.0000 0.0000 C\\n19 None -3.0254 1.1955 -0.7500 P\\n20 None -1.8176 0.5987 -1.3971 C\\n21 None -1.9040 -0.7456 -2.0443 C\\n22 None -0.6962 -1.3436 -2.6920 C\\n23 None 0.5982 -0.5949 -2.6914 C\\n24 None 0.6846 0.7494 -2.0443 C\\n25 None -0.5233 1.3462 -1.3971 C\\n26 None -2.9390 2.5398 -0.1029 C\\n27 None -1.6447 3.2885 -0.1023 C\\n28 None -1.5583 4.6328 0.5449 C\\n29 None -2.7662 5.2296 1.1920 C\\n30 None -4.0604 4.4821 1.1920 C\\n31 None -4.1468 3.1378 0.5449 C\\n32 None -2.7986 -1.4800 1.2644 N\\n33 None -2.1507 -2.8255 1.3504 C\\n34 None -3.4458 -0.8835 2.4732 C\\n35 None 0.9295 -1.6111 0.0000 P\\n36 None 0.3314 -2.8190 -0.6476 C\\n37 None -1.0128 -2.7327 -1.2949 C\\n38 None -1.6095 -3.9406 -1.9418 C\\n39 None -0.8621 -5.2350 -1.9415 C\\n40 None 0.4821 -5.3213 -1.2942 C\\n41 None 1.0801 -4.1134 -0.6466 C\\n42 None 2.2737 -1.6975 0.6473 C\\n43 None 3.0211 -2.9918 0.6477 C\\n44 None 4.3653 -3.0781 1.2950 C\\n45 None 4.9634 -1.8702 1.9425 C\\n46 None 4.2159 -0.5759 1.9422 C\\n47 None 2.8717 -0.4896 1.2949 C\\n@<TRIPOS>BOND\\n1 11 1 un\\n2 11 5 un\\n3 11 2 un\\n4 11 4 un\\n5 11 3 un\\n6 1 2 ar\\n7 2 3 ar\\n8 3 4 ar\\n9 4 5 ar\\n10 1 5 ar\\n11 6 7 ar\\n12 7 8 ar\\n13 8 9 ar\\n14 9 10 ar\\n15 6 10 ar\\n16 11 10 un\\n17 11 7 un\\n18 11 9 un\\n19 11 8 un\\n20 11 6 un\\n21 4 12 1\\n22 12 18 1\\n23 13 18 1\\n24 14 13 2\\n25 15 14 1\\n26 16 15 2\\n27 17 16 1\\n28 18 17 2\\n29 30 31 2\\n30 29 30 1\\n31 28 29 2\\n32 27 28 1\\n33 26 27 2\\n34 26 31 1\\n35 24 25 2\\n36 23 24 1\\n37 22 23 2\\n38 21 22 1\\n39 20 21 2\\n40 20 25 1\\n41 19 20 1\\n42 19 26 1\\n43 5 19 1\\n44 32 33 1\\n45 32 34 1\\n46 12 32 1\\n47 46 47 2\\n48 45 46 1\\n49 44 45 2\\n50 43 44 1\\n51 42 43 2\\n52 42 47 1\\n53 40 41 2\\n54 39 40 1\\n55 38 39 2\\n56 37 38 1\\n57 36 37 2\\n58 36 41 1\\n59 35 36 1\\n60 35 42 1\\n61 13 35 1\\n\\n\",\"mol2\");\n\tviewer_1729527105844459.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_1729527105844459.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_1729527105844459.zoomTo();\n\tviewer_1729527105844459.setBackgroundColor(\"white\");\nviewer_1729527105844459.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_1729527105844459\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_1729527105844459\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_1729527105844459 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_1729527105844459\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_1729527105844459 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_1729527105844459\"),{backgroundColor:\"white\"});\n",
       "viewer_1729527105844459.zoomTo();\n",
       "\tviewer_1729527105844459.addModel(\"@<TRIPOS>MOLECULE\\nTaniaphos\\n47 61 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -6.3861 0.2778 -0.7500 C\\n2 None -6.9319 -0.0042 0.0000 C\\n3 None -5.5097 0.0208 2.2500 C\\n4 None -4.0986 0.0000 0.0000 C\\n5 None -4.6361 0.2653 -0.7500 C\\n6 None -6.8611 -3.0458 0.0000 C\\n7 None -6.3333 -3.6931 1.7500 C\\n8 None -4.5292 -3.7042 1.7500 C\\n9 None -3.9472 -3.0653 0.0000 C\\n10 None -5.3806 -3.1611 -0.7500 C\\n11 None -5.4403 -2.1417 0.7500 Fe\\n12 None -2.7986 -0.7500 0.0000 C\\n13 None 0.0000 0.0000 0.0000 C\\n14 None 0.7500 1.2986 0.0000 C\\n15 None 0.0000 2.5972 0.0000 C\\n16 None -1.5000 2.5972 0.0000 C\\n17 None -2.2500 1.2986 0.0000 C\\n18 None -1.5000 0.0000 0.0000 C\\n19 None -3.0254 1.1955 -0.7500 P\\n20 None -1.8176 0.5987 -1.3971 C\\n21 None -1.9040 -0.7456 -2.0443 C\\n22 None -0.6962 -1.3436 -2.6920 C\\n23 None 0.5982 -0.5949 -2.6914 C\\n24 None 0.6846 0.7494 -2.0443 C\\n25 None -0.5233 1.3462 -1.3971 C\\n26 None -2.9390 2.5398 -0.1029 C\\n27 None -1.6447 3.2885 -0.1023 C\\n28 None -1.5583 4.6328 0.5449 C\\n29 None -2.7662 5.2296 1.1920 C\\n30 None -4.0604 4.4821 1.1920 C\\n31 None -4.1468 3.1378 0.5449 C\\n32 None -2.7986 -1.4800 1.2644 N\\n33 None -2.1507 -2.8255 1.3504 C\\n34 None -3.4458 -0.8835 2.4732 C\\n35 None 0.9295 -1.6111 0.0000 P\\n36 None 0.3314 -2.8190 -0.6476 C\\n37 None -1.0128 -2.7327 -1.2949 C\\n38 None -1.6095 -3.9406 -1.9418 C\\n39 None -0.8621 -5.2350 -1.9415 C\\n40 None 0.4821 -5.3213 -1.2942 C\\n41 None 1.0801 -4.1134 -0.6466 C\\n42 None 2.2737 -1.6975 0.6473 C\\n43 None 3.0211 -2.9918 0.6477 C\\n44 None 4.3653 -3.0781 1.2950 C\\n45 None 4.9634 -1.8702 1.9425 C\\n46 None 4.2159 -0.5759 1.9422 C\\n47 None 2.8717 -0.4896 1.2949 C\\n@<TRIPOS>BOND\\n1 11 1 un\\n2 11 5 un\\n3 11 2 un\\n4 11 4 un\\n5 11 3 un\\n6 1 2 ar\\n7 2 3 ar\\n8 3 4 ar\\n9 4 5 ar\\n10 1 5 ar\\n11 6 7 ar\\n12 7 8 ar\\n13 8 9 ar\\n14 9 10 ar\\n15 6 10 ar\\n16 11 10 un\\n17 11 7 un\\n18 11 9 un\\n19 11 8 un\\n20 11 6 un\\n21 4 12 1\\n22 12 18 1\\n23 13 18 1\\n24 14 13 2\\n25 15 14 1\\n26 16 15 2\\n27 17 16 1\\n28 18 17 2\\n29 30 31 2\\n30 29 30 1\\n31 28 29 2\\n32 27 28 1\\n33 26 27 2\\n34 26 31 1\\n35 24 25 2\\n36 23 24 1\\n37 22 23 2\\n38 21 22 1\\n39 20 21 2\\n40 20 25 1\\n41 19 20 1\\n42 19 26 1\\n43 5 19 1\\n44 32 33 1\\n45 32 34 1\\n46 12 32 1\\n47 46 47 2\\n48 45 46 1\\n49 44 45 2\\n50 43 44 1\\n51 42 43 2\\n52 42 47 1\\n53 40 41 2\\n54 39 40 1\\n55 38 39 2\\n56 37 38 1\\n57 36 37 2\\n58 36 41 1\\n59 35 36 1\\n60 35 42 1\\n61 13 35 1\\n\\n\",\"mol2\");\n",
       "\tviewer_1729527105844459.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_1729527105844459.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_1729527105844459.zoomTo();\n",
       "\tviewer_1729527105844459.setBackgroundColor(\"white\");\n",
       "viewer_1729527105844459.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_1729527105844459.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_1729527105844459.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='Taniaphos', formula='C43 Fe1 N1 P2')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#This accesses the structure\n",
    "m = cdxf['Taniaphos']\n",
    "m"
   ]
  },
  {
   "attachments": {
    "BrettPhos.PNG": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is an additional structure showing the ability to parse pi-allyl complexes and even non-traditional bonds via a Pd-allyl BrettPhos structure:\n",
    "\n",
    "![BrettPhos.PNG](attachment:BrettPhos.PNG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17295271058719966\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17295271058719966\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17295271058719966 = null;\nvar warn = document.getElementById(\"3dmolwarning_17295271058719966\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17295271058719966 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271058719966\"),{backgroundColor:\"white\"});\nviewer_17295271058719966.zoomTo();\n\tviewer_17295271058719966.addModel(\"@<TRIPOS>MOLECULE\\nBrettPhos\\n48 55 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -10.4333 0.7722 0.0000 C\\n2 None -10.4333 -0.7278 0.0000 C\\n3 None -9.1347 -1.4778 0.0000 C\\n4 None -7.8361 -0.7278 0.0000 C\\n5 None -7.8361 0.7722 0.0000 C\\n6 None -9.1347 1.5222 0.0000 C\\n7 None -6.5375 -1.4778 0.0000 C\\n8 None -6.5375 1.5222 0.0000 P\\n9 None -6.5375 1.5222 -1.7159 C\\n10 None -6.9368 2.2333 1.2600 C\\n11 None -5.3084 2.2051 -2.2392 C\\n12 None -5.0892 2.3269 -3.7173 C\\n13 None -6.0995 1.7655 -4.6740 C\\n14 None -7.3287 1.0827 -4.1508 C\\n15 None -7.5479 0.9609 -2.6727 C\\n16 None -5.9772 2.3187 2.4093 C\\n17 None -6.3768 3.0293 3.6679 C\\n18 None -7.7359 3.6545 3.7773 C\\n19 None -8.6954 3.5691 2.6280 C\\n20 None -8.2958 2.8585 1.3693 C\\n21 None -6.2875 -2.5458 0.0000 C\\n22 None -4.9889 -3.2958 0.0000 C\\n23 None -3.9389 -2.9778 0.0000 C\\n24 None -4.1875 -1.9083 0.0000 C\\n25 None -5.4875 -1.1583 0.0000 C\\n26 None -4.0958 0.3222 0.0000 Pd\\n27 None -1.8875 1.4500 0.0000 C\\n28 None -0.3875 1.4500 0.0000 C\\n29 None 0.0000 0.0000 0.0000 C\\n30 None -9.8249 2.7172 -0.0000 O\\n31 None -10.7589 3.0406 -1.1209 C\\n32 None -9.1347 -2.8578 0.0000 O\\n33 None -10.4292 -3.6050 -0.0000 C\\n34 None -5.6813 -0.4338 -1.2990 C\\n35 None -6.7159 -0.9049 -2.2702 C\\n36 None -4.8402 0.7579 -1.6208 C\\n37 None -7.0371 -3.8451 0.0000 C\\n38 None -7.4109 -4.4931 -1.2939 C\\n39 None -7.4105 -4.4923 1.2958 C\\n40 None -2.6400 -3.7280 -0.0000 C\\n41 None -1.9947 -4.1006 1.2964 C\\n42 None -1.9916 -4.1024 -1.2933 C\\n43 None 0.7500 -0.0000 1.2990 C\\n44 None 0.1528 0.6472 2.5067 C\\n45 None 0.9000 0.6472 3.8009 C\\n46 None 2.2451 -0.0000 3.8887 C\\n47 None 2.8427 -0.6479 2.6793 C\\n48 None 2.0955 -0.6479 1.3850 C\\n@<TRIPOS>BOND\\n1 1 2 2\\n2 2 3 1\\n3 3 4 2\\n4 4 5 1\\n5 5 6 2\\n6 6 1 1\\n7 4 7 1\\n8 5 8 1\\n9 8 9 1\\n10 8 10 1\\n11 9 11 1\\n12 11 12 1\\n13 12 13 1\\n14 13 14 1\\n15 14 15 1\\n16 15 9 1\\n17 10 16 1\\n18 16 17 1\\n19 17 18 1\\n20 18 19 1\\n21 19 20 1\\n22 20 10 1\\n23 7 21 2\\n24 21 22 1\\n25 22 23 2\\n26 23 24 1\\n27 24 25 2\\n28 25 7 1\\n29 26 8 un\\n30 26 7 un\\n31 27 28 1\\n32 28 29 2\\n33 26 27 un\\n34 26 29 un\\n35 26 28 un\\n36 30 31 1\\n37 6 30 1\\n38 32 33 1\\n39 3 32 1\\n40 34 35 1\\n41 34 36 1\\n42 25 34 1\\n43 37 38 1\\n44 37 39 1\\n45 21 37 1\\n46 40 41 1\\n47 40 42 1\\n48 23 40 1\\n49 47 48 2\\n50 46 47 1\\n51 45 46 2\\n52 44 45 1\\n53 43 44 2\\n54 43 48 1\\n55 29 43 1\\n\\n\",\"mol2\");\n\tviewer_17295271058719966.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17295271058719966.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17295271058719966.zoomTo();\n\tviewer_17295271058719966.setBackgroundColor(\"white\");\nviewer_17295271058719966.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17295271058719966\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17295271058719966\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17295271058719966 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17295271058719966\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17295271058719966 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271058719966\"),{backgroundColor:\"white\"});\n",
       "viewer_17295271058719966.zoomTo();\n",
       "\tviewer_17295271058719966.addModel(\"@<TRIPOS>MOLECULE\\nBrettPhos\\n48 55 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -10.4333 0.7722 0.0000 C\\n2 None -10.4333 -0.7278 0.0000 C\\n3 None -9.1347 -1.4778 0.0000 C\\n4 None -7.8361 -0.7278 0.0000 C\\n5 None -7.8361 0.7722 0.0000 C\\n6 None -9.1347 1.5222 0.0000 C\\n7 None -6.5375 -1.4778 0.0000 C\\n8 None -6.5375 1.5222 0.0000 P\\n9 None -6.5375 1.5222 -1.7159 C\\n10 None -6.9368 2.2333 1.2600 C\\n11 None -5.3084 2.2051 -2.2392 C\\n12 None -5.0892 2.3269 -3.7173 C\\n13 None -6.0995 1.7655 -4.6740 C\\n14 None -7.3287 1.0827 -4.1508 C\\n15 None -7.5479 0.9609 -2.6727 C\\n16 None -5.9772 2.3187 2.4093 C\\n17 None -6.3768 3.0293 3.6679 C\\n18 None -7.7359 3.6545 3.7773 C\\n19 None -8.6954 3.5691 2.6280 C\\n20 None -8.2958 2.8585 1.3693 C\\n21 None -6.2875 -2.5458 0.0000 C\\n22 None -4.9889 -3.2958 0.0000 C\\n23 None -3.9389 -2.9778 0.0000 C\\n24 None -4.1875 -1.9083 0.0000 C\\n25 None -5.4875 -1.1583 0.0000 C\\n26 None -4.0958 0.3222 0.0000 Pd\\n27 None -1.8875 1.4500 0.0000 C\\n28 None -0.3875 1.4500 0.0000 C\\n29 None 0.0000 0.0000 0.0000 C\\n30 None -9.8249 2.7172 -0.0000 O\\n31 None -10.7589 3.0406 -1.1209 C\\n32 None -9.1347 -2.8578 0.0000 O\\n33 None -10.4292 -3.6050 -0.0000 C\\n34 None -5.6813 -0.4338 -1.2990 C\\n35 None -6.7159 -0.9049 -2.2702 C\\n36 None -4.8402 0.7579 -1.6208 C\\n37 None -7.0371 -3.8451 0.0000 C\\n38 None -7.4109 -4.4931 -1.2939 C\\n39 None -7.4105 -4.4923 1.2958 C\\n40 None -2.6400 -3.7280 -0.0000 C\\n41 None -1.9947 -4.1006 1.2964 C\\n42 None -1.9916 -4.1024 -1.2933 C\\n43 None 0.7500 -0.0000 1.2990 C\\n44 None 0.1528 0.6472 2.5067 C\\n45 None 0.9000 0.6472 3.8009 C\\n46 None 2.2451 -0.0000 3.8887 C\\n47 None 2.8427 -0.6479 2.6793 C\\n48 None 2.0955 -0.6479 1.3850 C\\n@<TRIPOS>BOND\\n1 1 2 2\\n2 2 3 1\\n3 3 4 2\\n4 4 5 1\\n5 5 6 2\\n6 6 1 1\\n7 4 7 1\\n8 5 8 1\\n9 8 9 1\\n10 8 10 1\\n11 9 11 1\\n12 11 12 1\\n13 12 13 1\\n14 13 14 1\\n15 14 15 1\\n16 15 9 1\\n17 10 16 1\\n18 16 17 1\\n19 17 18 1\\n20 18 19 1\\n21 19 20 1\\n22 20 10 1\\n23 7 21 2\\n24 21 22 1\\n25 22 23 2\\n26 23 24 1\\n27 24 25 2\\n28 25 7 1\\n29 26 8 un\\n30 26 7 un\\n31 27 28 1\\n32 28 29 2\\n33 26 27 un\\n34 26 29 un\\n35 26 28 un\\n36 30 31 1\\n37 6 30 1\\n38 32 33 1\\n39 3 32 1\\n40 34 35 1\\n41 34 36 1\\n42 25 34 1\\n43 37 38 1\\n44 37 39 1\\n45 21 37 1\\n46 40 41 1\\n47 40 42 1\\n48 23 40 1\\n49 47 48 2\\n50 46 47 1\\n51 45 46 2\\n52 44 45 1\\n53 43 44 2\\n54 43 48 1\\n55 29 43 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17295271058719966.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17295271058719966.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17295271058719966.zoomTo();\n",
       "\tviewer_17295271058719966.setBackgroundColor(\"white\");\n",
       "viewer_17295271058719966.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17295271058719966.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17295271058719966.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='BrettPhos', formula='C44 O2 P1 Pd1')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#This accesses the structure\n",
    "m = cdxf['BrettPhos']\n",
    "m"
   ]
  },
  {
   "attachments": {
    "Charge.PNG": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`molli` can understand not only the charges of certain structures, but also the multiplicity of varying structures. This results in a very robust parsing algorithm, where even upon adding implicit hydrogens, it does not add too many. A simple example can be shown utilizing N-Oxide compounds\n",
    "\n",
    "## Charge Example \n",
    "\n",
    "![Charge.PNG](attachment:Charge.PNG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The formal charge on Nitrogen = 1\n",
      "The formal charge on Oxygen = -1\n",
      "The charge of the Molecule = 0\n"
     ]
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17295271058851862\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17295271058851862\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17295271058851862 = null;\nvar warn = document.getElementById(\"3dmolwarning_17295271058851862\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17295271058851862 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271058851862\"),{backgroundColor:\"white\"});\nviewer_17295271058851862.zoomTo();\n\tviewer_17295271058851862.addModel(\"@<TRIPOS>MOLECULE\\na3\\n19 19 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -0.6184 1.4584 0.0000 C\\n2 None -0.6184 -0.0416 0.0000 C\\n3 None 0.8075 -0.5048 0.0000 N\\n4 None 1.6898 0.7084 0.0000 C\\n5 None 0.8075 1.9217 0.0000 C\\n6 None 1.2716 -1.9316 0.0000 O\\n7 None -2.1105 -0.1986 0.0000 C\\n8 None -1.2290 -1.4119 0.0000 C\\n9 None -1.1148 1.8194 -0.8765 H\\n10 None -1.1148 1.8194 0.8765 H\\n11 None 2.7598 0.7084 0.0000 H\\n12 None 0.9967 2.5055 0.8765 H\\n13 None 0.9967 2.5055 -0.8765 H\\n14 None -2.4541 -0.3410 -1.0033 H\\n15 None -2.5617 0.6806 0.4102 H\\n16 None -2.3798 -1.0475 0.5931 H\\n17 None -0.5325 -2.1127 -0.4106 H\\n18 None -2.1198 -1.4054 -0.5927 H\\n19 None -1.4702 -1.6949 1.0033 H\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 1\\n3 3 4 2\\n4 4 5 1\\n5 5 1 1\\n6 3 6 1\\n7 2 7 1\\n8 2 8 1\\n9 1 9 1\\n10 1 10 1\\n11 4 11 1\\n12 5 12 1\\n13 5 13 1\\n14 7 14 1\\n15 7 15 1\\n16 7 16 1\\n17 8 17 1\\n18 8 18 1\\n19 8 19 1\\n\\n\",\"mol2\");\n\tviewer_17295271058851862.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17295271058851862.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17295271058851862.zoomTo();\n\tviewer_17295271058851862.setBackgroundColor(\"white\");\nviewer_17295271058851862.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17295271058851862\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17295271058851862\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17295271058851862 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17295271058851862\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17295271058851862 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271058851862\"),{backgroundColor:\"white\"});\n",
       "viewer_17295271058851862.zoomTo();\n",
       "\tviewer_17295271058851862.addModel(\"@<TRIPOS>MOLECULE\\na3\\n19 19 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -0.6184 1.4584 0.0000 C\\n2 None -0.6184 -0.0416 0.0000 C\\n3 None 0.8075 -0.5048 0.0000 N\\n4 None 1.6898 0.7084 0.0000 C\\n5 None 0.8075 1.9217 0.0000 C\\n6 None 1.2716 -1.9316 0.0000 O\\n7 None -2.1105 -0.1986 0.0000 C\\n8 None -1.2290 -1.4119 0.0000 C\\n9 None -1.1148 1.8194 -0.8765 H\\n10 None -1.1148 1.8194 0.8765 H\\n11 None 2.7598 0.7084 0.0000 H\\n12 None 0.9967 2.5055 0.8765 H\\n13 None 0.9967 2.5055 -0.8765 H\\n14 None -2.4541 -0.3410 -1.0033 H\\n15 None -2.5617 0.6806 0.4102 H\\n16 None -2.3798 -1.0475 0.5931 H\\n17 None -0.5325 -2.1127 -0.4106 H\\n18 None -2.1198 -1.4054 -0.5927 H\\n19 None -1.4702 -1.6949 1.0033 H\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 1\\n3 3 4 2\\n4 4 5 1\\n5 5 1 1\\n6 3 6 1\\n7 2 7 1\\n8 2 8 1\\n9 1 9 1\\n10 1 10 1\\n11 4 11 1\\n12 5 12 1\\n13 5 13 1\\n14 7 14 1\\n15 7 15 1\\n16 7 16 1\\n17 8 17 1\\n18 8 18 1\\n19 8 19 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17295271058851862.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17295271058851862.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17295271058851862.zoomTo();\n",
       "\tviewer_17295271058851862.setBackgroundColor(\"white\");\n",
       "viewer_17295271058851862.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17295271058851862.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17295271058851862.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='a3', formula='C6 H11 N1 O1')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# This reads the cdxml file\n",
    "cdxf2 = ml.CDXMLFile(ml.files.charges_mult_cdxml)\n",
    "\n",
    "#This accesses the structure\n",
    "m = cdxf2['a3']\n",
    "\n",
    "#This finds the nitrogen\n",
    "nitrogen = m.get_atom(ml.Element.N)\n",
    "\n",
    "#This finds the oxygen\n",
    "oxygen = m.get_atom(ml.Element.O)\n",
    "\n",
    "print(f'The formal charge on Nitrogen = {nitrogen.formal_charge}')\n",
    "print(f'The formal charge on Oxygen = {oxygen.formal_charge}')\n",
    "print(f'The charge of the Molecule = {m.charge}')\n",
    "\n",
    "\n",
    "#This adds the implicit hydrogens\n",
    "m.add_implicit_hydrogens()\n",
    "m"
   ]
  },
  {
   "attachments": {
    "chargemult.PNG": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Charge and Multiplicity Example \n",
    "\n",
    "Since `molli` can parse the electrons drawn on an atom, it can perceive if hydrogens are necessary upon addition of implicit hydrogens\n",
    "\n",
    "![chargemult.PNG](attachment:chargemult.PNG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The formal charge on Nitrogen = 1, The formal spin on Nitrogen = 1\n",
      "The charge of the Molecule = 1, The multiplicity of the Molecule = 2 \n"
     ]
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17295271058988972\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17295271058988972\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17295271058988972 = null;\nvar warn = document.getElementById(\"3dmolwarning_17295271058988972\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17295271058988972 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271058988972\"),{backgroundColor:\"white\"});\nviewer_17295271058988972.zoomTo();\n\tviewer_17295271058988972.addModel(\"@<TRIPOS>MOLECULE\\na6\\n28 27 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -0.1440 -0.2500 0.0000 N\\n2 None 1.1548 0.5000 0.0000 C\\n3 None -1.4437 0.5000 0.0000 C\\n4 None -2.7425 -0.2500 0.0000 C\\n5 None -1.4437 2.0000 0.0000 C\\n6 None 2.4536 -0.2500 0.0000 C\\n7 None 1.1548 2.0000 0.0000 C\\n8 None -0.1440 -1.7500 0.0000 C\\n9 None 1.1548 -2.5000 0.0000 C\\n10 None 1.1548 0.5000 -1.0700 H\\n11 None -1.4437 0.5000 -1.0700 H\\n12 None -2.7992 -0.8652 -0.8736 H\\n13 None -3.5559 0.4453 -0.0001 H\\n14 None -2.7992 -0.8651 0.8737 H\\n15 None -0.4349 2.3567 0.0000 H\\n16 None -1.9481 2.3567 0.8737 H\\n17 None -1.9481 2.3567 -0.8737 H\\n18 None 3.0148 0.0085 0.8736 H\\n19 None 3.0147 0.0084 -0.8737 H\\n20 None 2.2580 -1.3020 0.0001 H\\n21 None 2.1636 2.3567 0.0000 H\\n22 None 0.6504 2.3567 0.8737 H\\n23 None 0.6504 2.3567 -0.8737 H\\n24 None -0.6755 -2.0569 0.8765 H\\n25 None -0.6755 -2.0569 -0.8765 H\\n26 None 1.7159 -2.2415 0.8736 H\\n27 None 1.7159 -2.2416 -0.8737 H\\n28 None 0.9592 -3.5520 0.0001 H\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 1 3 1\\n3 3 4 1\\n4 3 5 1\\n5 2 6 1\\n6 2 7 1\\n7 1 8 1\\n8 8 9 1\\n9 2 10 1\\n10 3 11 1\\n11 4 12 1\\n12 4 13 1\\n13 4 14 1\\n14 5 15 1\\n15 5 16 1\\n16 5 17 1\\n17 6 18 1\\n18 6 19 1\\n19 6 20 1\\n20 7 21 1\\n21 7 22 1\\n22 7 23 1\\n23 8 24 1\\n24 8 25 1\\n25 9 26 1\\n26 9 27 1\\n27 9 28 1\\n\\n\",\"mol2\");\n\tviewer_17295271058988972.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17295271058988972.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17295271058988972.zoomTo();\n\tviewer_17295271058988972.setBackgroundColor(\"white\");\nviewer_17295271058988972.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17295271058988972\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17295271058988972\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17295271058988972 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17295271058988972\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17295271058988972 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271058988972\"),{backgroundColor:\"white\"});\n",
       "viewer_17295271058988972.zoomTo();\n",
       "\tviewer_17295271058988972.addModel(\"@<TRIPOS>MOLECULE\\na6\\n28 27 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -0.1440 -0.2500 0.0000 N\\n2 None 1.1548 0.5000 0.0000 C\\n3 None -1.4437 0.5000 0.0000 C\\n4 None -2.7425 -0.2500 0.0000 C\\n5 None -1.4437 2.0000 0.0000 C\\n6 None 2.4536 -0.2500 0.0000 C\\n7 None 1.1548 2.0000 0.0000 C\\n8 None -0.1440 -1.7500 0.0000 C\\n9 None 1.1548 -2.5000 0.0000 C\\n10 None 1.1548 0.5000 -1.0700 H\\n11 None -1.4437 0.5000 -1.0700 H\\n12 None -2.7992 -0.8652 -0.8736 H\\n13 None -3.5559 0.4453 -0.0001 H\\n14 None -2.7992 -0.8651 0.8737 H\\n15 None -0.4349 2.3567 0.0000 H\\n16 None -1.9481 2.3567 0.8737 H\\n17 None -1.9481 2.3567 -0.8737 H\\n18 None 3.0148 0.0085 0.8736 H\\n19 None 3.0147 0.0084 -0.8737 H\\n20 None 2.2580 -1.3020 0.0001 H\\n21 None 2.1636 2.3567 0.0000 H\\n22 None 0.6504 2.3567 0.8737 H\\n23 None 0.6504 2.3567 -0.8737 H\\n24 None -0.6755 -2.0569 0.8765 H\\n25 None -0.6755 -2.0569 -0.8765 H\\n26 None 1.7159 -2.2415 0.8736 H\\n27 None 1.7159 -2.2416 -0.8737 H\\n28 None 0.9592 -3.5520 0.0001 H\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 1 3 1\\n3 3 4 1\\n4 3 5 1\\n5 2 6 1\\n6 2 7 1\\n7 1 8 1\\n8 8 9 1\\n9 2 10 1\\n10 3 11 1\\n11 4 12 1\\n12 4 13 1\\n13 4 14 1\\n14 5 15 1\\n15 5 16 1\\n16 5 17 1\\n17 6 18 1\\n18 6 19 1\\n19 6 20 1\\n20 7 21 1\\n21 7 22 1\\n22 7 23 1\\n23 8 24 1\\n24 8 25 1\\n25 9 26 1\\n26 9 27 1\\n27 9 28 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17295271058988972.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17295271058988972.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17295271058988972.zoomTo();\n",
       "\tviewer_17295271058988972.setBackgroundColor(\"white\");\n",
       "viewer_17295271058988972.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17295271058988972.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17295271058988972.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='a6', formula='C8 H19 N1')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#This accesses the structure\n",
    "m = cdxf2['a6']\n",
    "\n",
    "#This finds the nitrogen\n",
    "nitrogen = m.get_atom(ml.Element.N)\n",
    "print(f'The formal charge on Nitrogen = {nitrogen.formal_charge}, The formal spin on Nitrogen = {nitrogen.formal_spin}')\n",
    "print(f'The charge of the Molecule = {m.charge}, The multiplicity of the Molecule = {m.mult} ')\n",
    "\n",
    "#This adds the implicit hydrogens\n",
    "m.add_implicit_hydrogens()\n",
    "m"
   ]
  },
  {
   "attachments": {
    "Mult.PNG": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGwAAABWCAYAAAAqh3MGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAUHSURBVHhe7ZstT+xAFEBX8i/AkCCRCAQSCQ5JguEHIHAogsSQ8AMQSIJCIjEkSILCAQ6BQPbllN59N5d29m0fdOfO3pPcvH0z3W07Z746HUZV4IoQ5owQ5owQ5owQ5owQ5owQ5owQ5oyihJ2fn1cLCwvV2tpa9fn52aT+5fT0tNrd3a2en5+bFH8UJWx1dbUajUZ1XF1dNalf8H/J29raalL9UZQwWhBCVlZWvrWwh4eHsbD9/f0m1R/FjWHv7+/Np+/c3t7W3WbqmNyJSYczQpgzQpgzQpgzQpgzQpgzihb29vZWR0kUK4znrcXFxTr4XArFCePhmCUqVjNeX1/r4DNp5HmnGGGI2dnZqTY2NuplKAtp5LGOyLFecS+MNcOjo6NqaWmpury8bFK7YRGYY/lO24p+7rgWhqA+hT+t5JxwKezu7q5+50UX+D/dm3Sj/Ba/6QFXwn6rgH+qAgyBC2F0YScnJ7/ehfXtYoekt7CXl5fq+vq6Ojs7qyM1ZZZj+sAkgReSh4eHgxSiHt/sW+tJ3N/fj+/14uKiLqM2pNy68lNMLezj46M6ODgYv73Vsby8XF+0RfKnQU/DZ7EHg66Rc3c9JmiorNy7LguJ4+Pjusw029vbdV5bWU1iqlLkxOvr6+OLQZzUKH3BT09PzTe+kPR/gYLK6UHXPohbaC1yf5SNlIeu1Ht7e83RXwwmjBNzIi7G1hqQi0SeRi48hYxTdH85LiVxTUxKNFRMube2wtf5iBUGEUZ/y0msDItcjG5lctFd3Nzc1LWYccrTfgupoFqGBSkco1vZIMJo5pyEwTQFYu1gyveINhgnNjc3q8fHxybFD6n70lgxgwiT7rDXSRI35nVTp3R3FP60DCJMTtKHlDCvUNjcEz3PtISwGZC9MBlge52kQGEyCaPwp2UQYUw2OMmkSQfPLTyP6JlTicLgX+8LQcwB5FFoEGF6Wt/2DCbI5GQehEmvk6rEMjnRj0ODCAO5QF1bNNIKCZ0vaaUhlZhoW5UhX1aG9Fg3mDAkyAUSCORCWC/TS1P24iW9ROT5lNBLU9LTSLpmMGFArZET2kBaW02T/FLRPYsNKrXtjQYVJtA3c6FSo9pECXJMySCFMpB7pWyo3G0wvnNMV36Kcqt9oYQwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ4QwZ8y1MN6a85q+z6v6WTGXwng9b/deEG37L3Jj7oTJVr2uYIdTztLmShhdnxXEDia9RY/IecNQEcJoETIWpcYj2xXKHx3yfdnwSSAxV1wLo8C79ki2jUdamJWSyssJt8L0NmmCFmLl2R23esOnzWP3suSxazdX3ArTkwdECHYXrnR7YCXzG3Sh9jupTbGzxq0wWpOE7vr4rAvfjmkI1Pk2Un9gngNFTDoEZFHgWoAVRivTf6igg24yNWnJAdfCRBBdm57l6dACbJdI0ELttD7nVuZWmG1JXaGF6ZZlu1I96SByxaUw21JoIUzLRY7O08J0up1YTBr7csGlMDur0y0lVfA63a5mcJzOD2E/iH7IpXVpUpMOO85Jq+Q7dhzLFZfCbGuQ5yktUkJ3fXy2+W1hW19OuBQG+sHZBhMK+cxkQjNpssLv5oxbYUDhM/NDEP8ytjGG0dpIk3QLx3CsfJdArF4VyRXXwuaREOaMEOaMEOaMEOaMEOaMEOaMEOaKqvoDChdPhv+zDTkAAAAASUVORK5CYII="
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Multiplicity Example\n",
    "\n",
    "![Mult.PNG](attachment:Mult.PNG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The formal charge on Carbon = 0, The formal spin on Carbon = 2\n",
      "The charge of the Molecule = 0, The multiplicity of the Molecule = 3 \n"
     ]
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<div id=\"3dmolviewer_17295271059157734\"  style=\"position: relative; width: 100%; height: 500px;\">\n        <p id=\"3dmolwarning_17295271059157734\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n        </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n  return new Promise((resolve, reject) => {\n    //this is to ignore the existence of requirejs amd\n    var savedexports, savedmodule;\n    if (typeof exports !== 'undefined') savedexports = exports;\n    else exports = {}\n    if (typeof module !== 'undefined') savedmodule = module;\n    else module = {}\n\n    var tag = document.createElement('script');\n    tag.src = uri;\n    tag.async = true;\n    tag.onload = () => {\n        exports = savedexports;\n        module = savedmodule;\n        resolve();\n    };\n  var firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n}\n\nvar viewer_17295271059157734 = null;\nvar warn = document.getElementById(\"3dmolwarning_17295271059157734\");\nif(warn) {\n    warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_17295271059157734 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271059157734\"),{backgroundColor:\"white\"});\nviewer_17295271059157734.zoomTo();\n\tviewer_17295271059157734.addModel(\"@<TRIPOS>MOLECULE\\na8\\n3 2 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -1.2988 -0.2500 0.0000 Cl\\n2 None 0.0000 0.5000 0.0000 C\\n3 None 1.2988 -0.2500 0.0000 Cl\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 1\\n\\n\",\"mol2\");\n\tviewer_17295271059157734.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n\tviewer_17295271059157734.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n\tviewer_17295271059157734.zoomTo();\n\tviewer_17295271059157734.setBackgroundColor(\"white\");\nviewer_17295271059157734.render();\n});\n</script>",
      "text/html": [
       "<div id=\"3dmolviewer_17295271059157734\"  style=\"position: relative; width: 100%; height: 500px;\">\n",
       "        <p id=\"3dmolwarning_17295271059157734\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason).  You need to install the 3dmol extension: <br>\n",
       "        <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
       "        </div>\n",
       "<script>\n",
       "\n",
       "var loadScriptAsync = function(uri){\n",
       "  return new Promise((resolve, reject) => {\n",
       "    //this is to ignore the existence of requirejs amd\n",
       "    var savedexports, savedmodule;\n",
       "    if (typeof exports !== 'undefined') savedexports = exports;\n",
       "    else exports = {}\n",
       "    if (typeof module !== 'undefined') savedmodule = module;\n",
       "    else module = {}\n",
       "\n",
       "    var tag = document.createElement('script');\n",
       "    tag.src = uri;\n",
       "    tag.async = true;\n",
       "    tag.onload = () => {\n",
       "        exports = savedexports;\n",
       "        module = savedmodule;\n",
       "        resolve();\n",
       "    };\n",
       "  var firstScriptTag = document.getElementsByTagName('script')[0];\n",
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
       "});\n",
       "};\n",
       "\n",
       "if(typeof $3Dmolpromise === 'undefined') {\n",
       "$3Dmolpromise = null;\n",
       "  $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.4/3Dmol-min.js');\n",
       "}\n",
       "\n",
       "var viewer_17295271059157734 = null;\n",
       "var warn = document.getElementById(\"3dmolwarning_17295271059157734\");\n",
       "if(warn) {\n",
       "    warn.parentNode.removeChild(warn);\n",
       "}\n",
       "$3Dmolpromise.then(function() {\n",
       "viewer_17295271059157734 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_17295271059157734\"),{backgroundColor:\"white\"});\n",
       "viewer_17295271059157734.zoomTo();\n",
       "\tviewer_17295271059157734.addModel(\"@<TRIPOS>MOLECULE\\na8\\n3 2 0 0 0\\nSMALL\\nNO_CHARGES\\n\\n@<TRIPOS>ATOM\\n1 None -1.2988 -0.2500 0.0000 Cl\\n2 None 0.0000 0.5000 0.0000 C\\n3 None 1.2988 -0.2500 0.0000 Cl\\n@<TRIPOS>BOND\\n1 1 2 1\\n2 2 3 1\\n\\n\",\"mol2\");\n",
       "\tviewer_17295271059157734.setStyle({\"stick\": {\"radius\": 0.1}, \"sphere\": {\"scale\": 0.15}});\n",
       "\tviewer_17295271059157734.setHoverable({},true,\"\\n        function(atom,viewer,event,container) {\\n            if(!atom.label) {\\n                atom.label = viewer.addLabel(atom.elem + '(' + atom.index + ')', {position: atom, backgroundColor: 'silver', fontColor:'black'});\\n            }\\n        }\\n        \",\"\\n        function(atom,viewer) { \\n            if(atom.label) {\\n                viewer.removeLabel(atom.label);\\n                delete atom.label;\\n            }\\n        }\\n        \");\n",
       "\tviewer_17295271059157734.zoomTo();\n",
       "\tviewer_17295271059157734.setBackgroundColor(\"white\");\n",
       "viewer_17295271059157734.render();\n",
       "});\n",
       "</script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/3dmoljs_load.v0": "<script>\n            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n                \n                viewer_17295271059157734.render();\n            });\n            </script>",
      "text/html": [
       "<script>\n",
       "            $3Dmolpromise.then(function() { //wrap in promise for non-interactive functionality\n",
       "                \n",
       "                viewer_17295271059157734.render();\n",
       "            });\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Molecule(name='a8', formula='C1 Cl2')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#This accesses the structure\n",
    "m = cdxf2['a8']\n",
    "\n",
    "#This finds the nitrogen\n",
    "carbon = m.get_atom(ml.Element.C)\n",
    "print(f'The formal charge on Carbon = {carbon.formal_charge}, The formal spin on Carbon = {carbon.formal_spin}')\n",
    "print(f'The charge of the Molecule = {m.charge}, The multiplicity of the Molecule = {m.mult} ')\n",
    "\n",
    "#This adds the implicit hydrogens\n",
    "m.add_implicit_hydrogens()\n",
    "m"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "dev-blake",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
